UPDATE
This commit is contained in:
+57
-1
@@ -21,10 +21,14 @@ from .serializers import (
|
||||
SensorParameterSerializer,
|
||||
)
|
||||
from .services import (
|
||||
BackendSyncError,
|
||||
assign_farm_plants_from_backend_ids,
|
||||
ExternalDataSyncError,
|
||||
ensure_location_and_weather_data,
|
||||
get_farm_details,
|
||||
resolve_center_location_from_boundary,
|
||||
sync_sensor_parameters_from_payload,
|
||||
sync_plant_catalog_from_backend,
|
||||
)
|
||||
|
||||
|
||||
@@ -188,6 +192,7 @@ class FarmDataUpsertView(APIView):
|
||||
)
|
||||
|
||||
with transaction.atomic():
|
||||
sync_sensor_parameters_from_payload(sensor_payload)
|
||||
farm_data, created = SensorData.objects.get_or_create(
|
||||
farm_uuid=farm_uuid,
|
||||
defaults={
|
||||
@@ -227,7 +232,13 @@ class FarmDataUpsertView(APIView):
|
||||
farm_data.save()
|
||||
|
||||
if plant_ids is not None:
|
||||
farm_data.plants.set(plant_ids)
|
||||
try:
|
||||
assign_farm_plants_from_backend_ids(farm_data, plant_ids)
|
||||
except BackendSyncError as exc:
|
||||
return Response(
|
||||
{"code": 400, "msg": str(exc), "data": None},
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
|
||||
response_status = (
|
||||
status.HTTP_201_CREATED if created else status.HTTP_200_OK
|
||||
@@ -276,6 +287,51 @@ class FarmDetailView(APIView):
|
||||
)
|
||||
|
||||
|
||||
class PlantCatalogSyncView(APIView):
|
||||
@extend_schema(
|
||||
tags=["Farm Data"],
|
||||
summary="همگامسازی کاتالوگ گیاه از Backend",
|
||||
description="payload گیاههای canonical را از Backend دریافت و در `farm_data` snapshot میکند.",
|
||||
request=drf_serializers.ListSerializer(
|
||||
child=inline_serializer(
|
||||
name="PlantCatalogSyncItem",
|
||||
fields={
|
||||
"id": drf_serializers.IntegerField(),
|
||||
"name": drf_serializers.CharField(),
|
||||
},
|
||||
)
|
||||
),
|
||||
responses={
|
||||
200: OpenApiResponse(description="کاتالوگ گیاه با موفقیت sync شد."),
|
||||
400: OpenApiResponse(description="payload نامعتبر است."),
|
||||
},
|
||||
)
|
||||
def post(self, request):
|
||||
if not isinstance(request.data, list):
|
||||
return Response(
|
||||
{"code": 400, "msg": "payload باید آرایهای از گیاهها باشد.", "data": None},
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
try:
|
||||
snapshots = sync_plant_catalog_from_backend(request.data)
|
||||
except BackendSyncError as exc:
|
||||
return Response(
|
||||
{"code": 400, "msg": str(exc), "data": None},
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
return Response(
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "success",
|
||||
"data": {
|
||||
"count": len(snapshots),
|
||||
"plant_ids": [snapshot.backend_plant_id for snapshot in snapshots],
|
||||
},
|
||||
},
|
||||
status=status.HTTP_200_OK,
|
||||
)
|
||||
|
||||
|
||||
class SensorParameterCreateView(APIView):
|
||||
"""
|
||||
اضافه کردن پارامتر جدید و ثبت در ParameterUpdateLog.
|
||||
|
||||
Reference in New Issue
Block a user