This commit is contained in:
2026-04-27 00:40:59 +03:30
parent 2cd96ceec6
commit 64e67c282c
56 changed files with 3912 additions and 745 deletions
+64 -11
View File
@@ -1,13 +1,64 @@
from rest_framework import serializers
class RiskDetailsSerializer(serializers.Serializer):
risk_level = serializers.CharField(required=False, allow_blank=True)
risk_percentage = serializers.IntegerField(required=False)
detected_diseases = serializers.ListField(child=serializers.DictField(), required=False)
detected_pests = serializers.ListField(child=serializers.DictField(), required=False)
last_assessed_at = serializers.CharField(required=False, allow_blank=True)
recommendation = serializers.CharField(required=False, allow_blank=True)
class PestDetectionAnalyzeRequestSerializer(serializers.Serializer):
farm_uuid = serializers.UUIDField(required=True, help_text="UUID مزرعه برای تحلیل آفت/بیماری.")
sensor_uuid = serializers.UUIDField(required=False, help_text="UUID سنسور مرتبط در صورت وجود.")
plant_name = serializers.CharField(required=False, allow_blank=True, default="", help_text="نام گیاه یا محصول.")
query = serializers.CharField(required=False, allow_blank=True, default="", help_text="پرسش یا توضیح متنی کاربر.")
image_urls = serializers.ListField(
child=serializers.CharField(),
required=False,
default=list,
)
image = serializers.CharField(required=False, allow_blank=True, default="")
images = serializers.ListField(
child=serializers.CharField(),
required=False,
default=list,
)
def validate(self, attrs):
attrs["query"] = (attrs.get("query") or "").strip()
attrs["plant_name"] = (attrs.get("plant_name") or "").strip()
return attrs
class PestDetectionAnalyzeResponseSerializer(serializers.Serializer):
has_issue = serializers.BooleanField(required=False)
category = serializers.CharField(required=False, allow_blank=True)
confidence = serializers.FloatField(required=False)
severity = serializers.CharField(required=False, allow_blank=True)
summary = serializers.CharField(required=False, allow_blank=True)
detected_signs = serializers.ListField(child=serializers.CharField(), required=False)
possible_causes = serializers.ListField(child=serializers.CharField(), required=False)
immediate_actions = serializers.ListField(child=serializers.CharField(), required=False)
reasoning = serializers.ListField(child=serializers.CharField(), required=False)
class PestDetectionRiskRequestSerializer(serializers.Serializer):
farm_uuid = serializers.UUIDField(required=True, help_text="UUID مزرعه برای تحلیل ریسک آفت/بیماری.")
sensor_uuid = serializers.UUIDField(required=False, help_text="UUID سنسور مرتبط در صورت وجود.")
plant_name = serializers.CharField(required=False, allow_blank=True, default="", help_text="نام محصول یا گیاه.")
growth_stage = serializers.CharField(required=False, allow_blank=True, default="", help_text="مرحله رشد گیاه.")
query = serializers.CharField(required=False, allow_blank=True, default="", help_text="پرسش تکمیلی کاربر.")
class RiskBreakdownSerializer(serializers.Serializer):
score = serializers.FloatField(required=False)
level = serializers.CharField(required=False, allow_blank=True)
likely_conditions = serializers.ListField(child=serializers.CharField(), required=False)
reasoning = serializers.ListField(child=serializers.CharField(), required=False)
class PestDetectionRiskResponseSerializer(serializers.Serializer):
summary = serializers.CharField(required=False, allow_blank=True)
forecast_window = serializers.CharField(required=False, allow_blank=True)
overall_risk = serializers.CharField(required=False, allow_blank=True)
disease_risk = RiskBreakdownSerializer(required=False)
pest_risk = RiskBreakdownSerializer(required=False)
key_drivers = serializers.ListField(child=serializers.CharField(), required=False)
recommended_actions = serializers.ListField(child=serializers.CharField(), required=False)
class RiskCardSerializer(serializers.Serializer):
@@ -19,9 +70,11 @@ class RiskCardSerializer(serializers.Serializer):
avatarIcon = serializers.CharField(required=False, allow_blank=True)
chipText = serializers.CharField(required=False, allow_blank=True)
chipColor = serializers.CharField(required=False, allow_blank=True)
details = RiskDetailsSerializer(required=False)
details = serializers.DictField(required=False)
class RiskSummaryDataSerializer(serializers.Serializer):
disease_risk = RiskCardSerializer(required=False)
pest_risk = RiskCardSerializer(required=False)
class PestDetectionRiskSummaryResponseSerializer(serializers.Serializer):
farm_uuid = serializers.UUIDField(required=False, allow_null=True)
diseaseRisk = RiskCardSerializer(required=False)
pestRisk = RiskCardSerializer(required=False)
drivers = serializers.DictField(required=False)