This commit is contained in:
2026-03-25 01:56:41 +03:30
parent eb34360345
commit 98406cfd59
99 changed files with 3156 additions and 232 deletions
+62 -24
View File
@@ -10,6 +10,7 @@ from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from config.openapi import build_envelope_serializer, build_response
from location_data.models import SoilLocation
from .models import ParameterUpdateLog, SensorData, SensorDataHistory, SensorParameter
@@ -20,6 +21,36 @@ from .serializers import (
)
SensorDataEnvelopeSerializer = build_envelope_serializer(
"SensorDataEnvelopeSerializer",
SensorDataResponseSerializer,
)
SensorDataValidationErrorSerializer = build_envelope_serializer(
"SensorDataValidationErrorSerializer",
data_required=False,
allow_null=True,
)
SensorDataNotFoundSerializer = build_envelope_serializer(
"SensorDataNotFoundSerializer",
data_required=False,
allow_null=True,
)
SensorParameterResponseSerializer = build_envelope_serializer(
"SensorParameterEnvelopeSerializer",
inline_serializer(
name="SensorParameterPayloadSerializer",
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(),
},
),
)
class SensorDataUpdateView(APIView):
"""
آپدیت داده سنسور. هنگام آپدیت، نسخه فعلی در SensorDataHistory ذخیره می‌شود.
@@ -31,9 +62,18 @@ class SensorDataUpdateView(APIView):
description="داده سنسور را بر اساس uuid_sensor آپدیت (یا ایجاد) می‌کند. نسخه قبلی در تاریخچه ذخیره می‌شود.",
request=SensorDataUpdateSerializer,
responses={
200: SensorDataResponseSerializer,
400: OpenApiResponse(description="داده نامعتبر"),
404: OpenApiResponse(description="location_id یافت نشد"),
200: build_response(
SensorDataEnvelopeSerializer,
"داده سنسور با موفقیت ایجاد یا به‌روزرسانی شد.",
),
400: build_response(
SensorDataValidationErrorSerializer,
"داده ورودی نامعتبر است.",
),
404: build_response(
SensorDataNotFoundSerializer,
"location_id یافت نشد.",
),
},
examples=[
OpenApiExample(
@@ -61,9 +101,18 @@ class SensorDataUpdateView(APIView):
description="فقط فیلدهای ارسال‌شده آپدیت می‌شوند.",
request=SensorDataUpdateSerializer,
responses={
200: SensorDataResponseSerializer,
400: OpenApiResponse(description="داده نامعتبر"),
404: OpenApiResponse(description="location_id یافت نشد"),
200: build_response(
SensorDataEnvelopeSerializer,
"داده سنسور با موفقیت به‌روزرسانی شد.",
),
400: build_response(
SensorDataValidationErrorSerializer,
"داده ورودی نامعتبر است.",
),
404: build_response(
SensorDataNotFoundSerializer,
"location_id یافت نشد.",
),
},
)
def patch(self, request, uuid_sensor):
@@ -137,25 +186,14 @@ class SensorParameterCreateView(APIView):
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(),
},
),
},
201: build_response(
SensorParameterResponseSerializer,
"پارامتر سنسور با موفقیت ایجاد یا ویرایش شد.",
),
400: build_response(
SensorDataValidationErrorSerializer,
"داده ورودی نامعتبر است.",
),
400: OpenApiResponse(description="داده نامعتبر"),
},
examples=[
OpenApiExample(