first commit
This commit is contained in:
+84
-1
@@ -1,9 +1,16 @@
|
||||
from django.db import transaction
|
||||
from drf_spectacular.utils import (
|
||||
OpenApiExample,
|
||||
OpenApiResponse,
|
||||
extend_schema,
|
||||
inline_serializer,
|
||||
)
|
||||
from rest_framework import serializers as drf_serializers
|
||||
from rest_framework import status
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from soil_data.models import SoilLocation
|
||||
from location_data.models import SoilLocation
|
||||
|
||||
from .models import ParameterUpdateLog, SensorData, SensorDataHistory, SensorParameter
|
||||
from .serializers import (
|
||||
@@ -18,9 +25,47 @@ class SensorDataUpdateView(APIView):
|
||||
آپدیت داده سنسور. هنگام آپدیت، نسخه فعلی در SensorDataHistory ذخیره میشود.
|
||||
"""
|
||||
|
||||
@extend_schema(
|
||||
tags=["Sensor Data"],
|
||||
summary="آپدیت کامل داده سنسور",
|
||||
description="داده سنسور را بر اساس uuid_sensor آپدیت (یا ایجاد) میکند. نسخه قبلی در تاریخچه ذخیره میشود.",
|
||||
request=SensorDataUpdateSerializer,
|
||||
responses={
|
||||
200: SensorDataResponseSerializer,
|
||||
400: OpenApiResponse(description="داده نامعتبر"),
|
||||
404: OpenApiResponse(description="location_id یافت نشد"),
|
||||
},
|
||||
examples=[
|
||||
OpenApiExample(
|
||||
"نمونه درخواست",
|
||||
value={
|
||||
"location_id": 1,
|
||||
"soil_moisture": 45.2,
|
||||
"soil_temperature": 22.5,
|
||||
"soil_ph": 6.8,
|
||||
"electrical_conductivity": 1.2,
|
||||
"nitrogen": 30.0,
|
||||
"phosphorus": 15.0,
|
||||
"potassium": 20.0,
|
||||
},
|
||||
request_only=True,
|
||||
),
|
||||
],
|
||||
)
|
||||
def put(self, request, uuid_sensor):
|
||||
return self._update(request, uuid_sensor)
|
||||
|
||||
@extend_schema(
|
||||
tags=["Sensor Data"],
|
||||
summary="آپدیت جزئی داده سنسور",
|
||||
description="فقط فیلدهای ارسالشده آپدیت میشوند.",
|
||||
request=SensorDataUpdateSerializer,
|
||||
responses={
|
||||
200: SensorDataResponseSerializer,
|
||||
400: OpenApiResponse(description="داده نامعتبر"),
|
||||
404: OpenApiResponse(description="location_id یافت نشد"),
|
||||
},
|
||||
)
|
||||
def patch(self, request, uuid_sensor):
|
||||
return self._update(request, uuid_sensor, partial=True)
|
||||
|
||||
@@ -35,6 +80,7 @@ class SensorDataUpdateView(APIView):
|
||||
)
|
||||
|
||||
location_id = serializer.validated_data.pop("location_id")
|
||||
plant_ids = serializer.validated_data.pop("plant_ids", None)
|
||||
location = SoilLocation.objects.filter(pk=location_id).first()
|
||||
if not location:
|
||||
return Response(
|
||||
@@ -67,6 +113,9 @@ class SensorDataUpdateView(APIView):
|
||||
potassium=sensor_data.potassium,
|
||||
)
|
||||
|
||||
if plant_ids is not None:
|
||||
sensor_data.plants.set(plant_ids)
|
||||
|
||||
return Response(
|
||||
{
|
||||
"code": 200,
|
||||
@@ -82,6 +131,40 @@ class SensorParameterCreateView(APIView):
|
||||
اضافه کردن پارامتر جدید و ثبت در ParameterUpdateLog.
|
||||
"""
|
||||
|
||||
@extend_schema(
|
||||
tags=["Sensor Parameters"],
|
||||
summary="افزودن/ویرایش پارامتر سنسور",
|
||||
description="پارامتر جدید اضافه یا پارامتر موجود را ویرایش میکند و در لاگ ثبت میشود.",
|
||||
request=SensorParameterSerializer,
|
||||
responses={
|
||||
201: inline_serializer(
|
||||
name="SensorParameterResponse",
|
||||
fields={
|
||||
"code": drf_serializers.IntegerField(),
|
||||
"msg": drf_serializers.CharField(),
|
||||
"data": inline_serializer(
|
||||
name="SensorParameterData",
|
||||
fields={
|
||||
"id": drf_serializers.IntegerField(),
|
||||
"code": drf_serializers.CharField(),
|
||||
"name_fa": drf_serializers.CharField(),
|
||||
"unit": drf_serializers.CharField(),
|
||||
"created_at": drf_serializers.DateTimeField(),
|
||||
"action": drf_serializers.CharField(),
|
||||
},
|
||||
),
|
||||
},
|
||||
),
|
||||
400: OpenApiResponse(description="داده نامعتبر"),
|
||||
},
|
||||
examples=[
|
||||
OpenApiExample(
|
||||
"نمونه درخواست",
|
||||
value={"code": "soil_moisture", "name_fa": "رطوبت خاک", "unit": "%"},
|
||||
request_only=True,
|
||||
),
|
||||
],
|
||||
)
|
||||
def post(self, request):
|
||||
serializer = SensorParameterSerializer(data=request.data)
|
||||
if not serializer.is_valid():
|
||||
|
||||
Reference in New Issue
Block a user