Files

120 lines
5.5 KiB
Python
Raw Permalink Normal View History

2026-03-19 22:54:29 +03:30
from rest_framework import serializers
from .models import IrrigationMethod
class IrrigationMethodSerializer(serializers.ModelSerializer):
"""سریالایزر خروجی / ورودی برای IrrigationMethod."""
class Meta:
model = IrrigationMethod
fields = [
"id",
"name",
"category",
"description",
"water_efficiency_percent",
"water_pressure_required",
"flow_rate",
"coverage_area",
"soil_type",
"climate_suitability",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
2026-03-21 23:50:36 +03:30
class IrrigationRecommendRequestSerializer(serializers.Serializer):
"""سریالایزر ورودی برای درخواست توصیه آبیاری."""
2026-04-24 22:20:15 +03:30
farm_uuid = serializers.CharField(required=False, help_text="شناسه یکتای مزرعه (اجباری)")
sensor_uuid = serializers.CharField(required=False, help_text="نام قدیمی برای farm_uuid")
2026-03-21 23:50:36 +03:30
plant_name = serializers.CharField(required=False, allow_blank=True, help_text="نام گیاه")
growth_stage = serializers.CharField(required=False, allow_blank=True, help_text="مرحله رشد گیاه")
irrigation_method_name = serializers.CharField(
required=False, allow_blank=True, help_text="نام روش آبیاری"
)
query = serializers.CharField(required=False, allow_blank=True, help_text="سوال اختیاری")
2026-04-24 22:20:15 +03:30
def validate(self, attrs):
farm_uuid = attrs.get("farm_uuid") or attrs.get("sensor_uuid")
if not farm_uuid:
raise serializers.ValidationError({"farm_uuid": "farm_uuid الزامی است."})
attrs["farm_uuid"] = farm_uuid
return attrs
2026-03-21 23:50:36 +03:30
class IrrigationPlanSerializer(serializers.Serializer):
"""سریالایزر خروجی برای پلن توصیه آبیاری."""
frequencyPerWeek = serializers.IntegerField(help_text="تعداد دفعات آبیاری در هفته")
durationMinutes = serializers.IntegerField(help_text="مدت هر بار آبیاری به دقیقه")
bestTimeOfDay = serializers.CharField(help_text="بهترین زمان آبیاری")
moistureLevel = serializers.IntegerField(help_text="سطح رطوبت مطلوب خاک به درصد")
warning = serializers.CharField(help_text="هشدار یا توصیه مهم", allow_blank=True)
class IrrigationRecommendResponseSerializer(serializers.Serializer):
"""سریالایزر خروجی برای ریسپانس توصیه آبیاری."""
code = serializers.IntegerField()
msg = serializers.CharField()
data = serializers.DictField(child=serializers.JSONField())
2026-04-25 17:22:41 +03:30
class WaterStressRequestSerializer(serializers.Serializer):
farm_uuid = serializers.CharField(required=False, help_text="شناسه یکتای مزرعه")
sensor_uuid = serializers.CharField(required=False, help_text="نام قدیمی برای farm_uuid")
2026-05-02 14:03:48 +03:30
plant_name = serializers.CharField(required=False, allow_blank=True, help_text="نام گیاه")
irrigation_recommendation = serializers.JSONField(required=False)
fertilization_recommendation = serializers.JSONField(required=False)
2026-04-25 17:22:41 +03:30
def validate(self, attrs):
farm_uuid = attrs.get("farm_uuid") or attrs.get("sensor_uuid")
if not farm_uuid:
raise serializers.ValidationError({"farm_uuid": "farm_uuid الزامی است."})
attrs["farm_uuid"] = farm_uuid
return attrs
class WaterStressResponseSerializer(serializers.Serializer):
farm_uuid = serializers.CharField()
waterStressIndex = serializers.IntegerField()
level = serializers.CharField()
sourceMetric = serializers.JSONField()
2026-04-30 03:25:31 +03:30
class IrrigationPlanParserRequestSerializer(serializers.Serializer):
message = serializers.CharField(required=False, allow_blank=True, help_text="توضیح آزاد کاربر درباره برنامه آبیاری")
answers = serializers.JSONField(required=False, help_text="پاسخ های تکمیلی کاربر به سوالات مرحله قبل")
partial_plan = serializers.JSONField(required=False, help_text="داده استخراج شده مرحله قبل برای ادامه تکمیل")
farm_uuid = serializers.CharField(required=False, allow_blank=True, help_text="شناسه مزرعه برای غنی سازی context")
def validate(self, attrs):
message = (attrs.get("message") or "").strip()
answers = attrs.get("answers")
partial_plan = attrs.get("partial_plan")
if not message and not isinstance(answers, dict) and not isinstance(partial_plan, dict):
raise serializers.ValidationError(
"حداقل یکی از message، answers یا partial_plan باید ارسال شود."
)
return attrs
class PlanClarificationQuestionSerializer(serializers.Serializer):
id = serializers.CharField()
field = serializers.CharField()
question = serializers.CharField()
rationale = serializers.CharField(required=False, allow_blank=True)
class IrrigationPlanParserResponseSerializer(serializers.Serializer):
status = serializers.CharField()
status_fa = serializers.CharField()
summary = serializers.CharField()
missing_fields = serializers.ListField(child=serializers.CharField())
questions = PlanClarificationQuestionSerializer(many=True)
collected_data = serializers.JSONField()
final_plan = serializers.JSONField(required=False, allow_null=True)