Files
Ai/fertilization/serializers.py
T

118 lines
5.0 KiB
Python
Raw Normal View History

2026-03-21 23:50:36 +03:30
from rest_framework import serializers
class FertilizationRecommendRequestSerializer(serializers.Serializer):
"""سریالایزر ورودی برای درخواست توصیه کودهی."""
2026-04-28 04:11:49 +03:30
farm_uuid = serializers.CharField(required=False, help_text="شناسه یکتای مزرعه")
2026-04-24 22:20:15 +03:30
sensor_uuid = serializers.CharField(required=False, help_text="نام قدیمی برای farm_uuid")
2026-04-28 04:11:49 +03:30
crop_id = serializers.CharField(required=False, allow_blank=True, help_text="شناسه یا نام محصول")
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="مرحله رشد گیاه")
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 الزامی است."})
2026-04-28 04:11:49 +03:30
crop_id = (attrs.get("crop_id") or "").strip()
plant_name = (attrs.get("plant_name") or "").strip()
if crop_id and not plant_name:
attrs["plant_name"] = crop_id
2026-04-24 22:20:15 +03:30
attrs["farm_uuid"] = farm_uuid
return attrs
2026-03-21 23:50:36 +03:30
2026-04-28 04:11:49 +03:30
class NpkRatioSerializer(serializers.Serializer):
n = serializers.FloatField()
p = serializers.FloatField()
k = serializers.FloatField()
label = serializers.CharField()
class FertilizationApplicationMethodSerializer(serializers.Serializer):
id = serializers.CharField()
label = serializers.CharField()
class FertilizationApplicationIntervalSerializer(serializers.Serializer):
value = serializers.IntegerField()
unit = serializers.CharField()
label = serializers.CharField()
class FertilizationDosageSerializer(serializers.Serializer):
base_amount_per_hectare = serializers.FloatField()
base_amount_per_square_meter = serializers.FloatField()
unit = serializers.CharField()
label = serializers.CharField()
calculation_basis = serializers.CharField()
class PrimaryFertilizationRecommendationSerializer(serializers.Serializer):
fertilizer_code = serializers.CharField()
fertilizer_name = serializers.CharField()
display_title = serializers.CharField()
fertilizer_type = serializers.CharField()
npk_ratio = NpkRatioSerializer()
application_method = FertilizationApplicationMethodSerializer()
application_interval = FertilizationApplicationIntervalSerializer()
dosage = FertilizationDosageSerializer()
reasoning = serializers.CharField()
summary = serializers.CharField()
class FertilizationNutrientSerializer(serializers.Serializer):
key = serializers.CharField()
name = serializers.CharField()
value = serializers.FloatField()
unit = serializers.CharField()
description = serializers.CharField(required=False, allow_blank=True)
class FertilizationNutrientAnalysisSerializer(serializers.Serializer):
macro = FertilizationNutrientSerializer(many=True)
micro = FertilizationNutrientSerializer(many=True)
class FertilizationGuideStepSerializer(serializers.Serializer):
step_number = serializers.IntegerField()
title = serializers.CharField()
description = serializers.CharField()
class FertilizationApplicationGuideSerializer(serializers.Serializer):
safety_warning = serializers.CharField()
steps = FertilizationGuideStepSerializer(many=True)
class AlternativeFertilizationRecommendationSerializer(serializers.Serializer):
fertilizer_code = serializers.CharField()
fertilizer_name = serializers.CharField()
fertilizer_type = serializers.CharField()
usage_method = serializers.CharField()
description = serializers.CharField()
class FertilizationSectionSerializer(serializers.Serializer):
type = serializers.CharField()
title = serializers.CharField()
icon = serializers.CharField(required=False, allow_blank=True)
content = serializers.CharField(required=False, allow_blank=True)
items = serializers.ListField(child=serializers.CharField(), required=False)
fertilizerType = serializers.CharField(required=False, allow_blank=True)
amount = serializers.CharField(required=False, allow_blank=True)
applicationMethod = serializers.CharField(required=False, allow_blank=True)
timing = serializers.CharField(required=False, allow_blank=True)
validityPeriod = serializers.CharField(required=False, allow_blank=True)
expandableExplanation = serializers.CharField(required=False, allow_blank=True)
2026-03-21 23:50:36 +03:30
2026-04-28 04:11:49 +03:30
class FertilizationRecommendationResponseDataSerializer(serializers.Serializer):
primary_recommendation = PrimaryFertilizationRecommendationSerializer()
nutrient_analysis = FertilizationNutrientAnalysisSerializer()
application_guide = FertilizationApplicationGuideSerializer()
alternative_recommendations = AlternativeFertilizationRecommendationSerializer(many=True)
sections = FertilizationSectionSerializer(many=True, required=False)