75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from rest_framework import serializers
|
||
|
|
|
||
|
|
|
||
|
|
class GrowthSimulationRequestSerializer(serializers.Serializer):
|
||
|
|
plant_name = serializers.CharField(help_text="نام گیاه")
|
||
|
|
dynamic_parameters = serializers.ListField(
|
||
|
|
child=serializers.CharField(),
|
||
|
|
allow_empty=False,
|
||
|
|
help_text="پارامترهای متغیر رشد که باید در خروجی گزارش شوند.",
|
||
|
|
)
|
||
|
|
farm_uuid = serializers.UUIDField(required=False, allow_null=True)
|
||
|
|
weather = serializers.JSONField(required=False)
|
||
|
|
soil_parameters = serializers.JSONField(required=False)
|
||
|
|
site_parameters = serializers.JSONField(required=False)
|
||
|
|
crop_parameters = serializers.JSONField(required=False)
|
||
|
|
agromanagement = serializers.JSONField(required=False)
|
||
|
|
page_size = serializers.IntegerField(required=False, min_value=1, max_value=50)
|
||
|
|
|
||
|
|
def validate(self, attrs):
|
||
|
|
if not attrs.get("farm_uuid") and not attrs.get("weather"):
|
||
|
|
raise serializers.ValidationError(
|
||
|
|
"یکی از farm_uuid یا weather باید ارسال شود."
|
||
|
|
)
|
||
|
|
return attrs
|
||
|
|
|
||
|
|
|
||
|
|
class GrowthSimulationQueuedSerializer(serializers.Serializer):
|
||
|
|
task_id = serializers.CharField()
|
||
|
|
status_url = serializers.CharField()
|
||
|
|
plant_name = serializers.CharField()
|
||
|
|
|
||
|
|
|
||
|
|
class GrowthStageMetricSerializer(serializers.Serializer):
|
||
|
|
start = serializers.FloatField()
|
||
|
|
end = serializers.FloatField()
|
||
|
|
min = serializers.FloatField()
|
||
|
|
max = serializers.FloatField()
|
||
|
|
avg = serializers.FloatField()
|
||
|
|
|
||
|
|
|
||
|
|
class GrowthStageSerializer(serializers.Serializer):
|
||
|
|
order = serializers.IntegerField()
|
||
|
|
stage_code = serializers.CharField()
|
||
|
|
stage_name = serializers.CharField()
|
||
|
|
start_date = serializers.DateField()
|
||
|
|
end_date = serializers.DateField()
|
||
|
|
days_count = serializers.IntegerField()
|
||
|
|
metrics = serializers.JSONField()
|
||
|
|
|
||
|
|
|
||
|
|
class GrowthPaginationSerializer(serializers.Serializer):
|
||
|
|
page = serializers.IntegerField()
|
||
|
|
page_size = serializers.IntegerField()
|
||
|
|
total_items = serializers.IntegerField()
|
||
|
|
total_pages = serializers.IntegerField()
|
||
|
|
has_next = serializers.BooleanField()
|
||
|
|
has_previous = serializers.BooleanField()
|
||
|
|
|
||
|
|
|
||
|
|
class GrowthSimulationResultSerializer(serializers.Serializer):
|
||
|
|
plant_name = serializers.CharField()
|
||
|
|
dynamic_parameters = serializers.ListField(child=serializers.CharField())
|
||
|
|
engine = serializers.CharField(allow_null=True)
|
||
|
|
model_name = serializers.CharField(allow_null=True)
|
||
|
|
scenario_id = serializers.IntegerField(allow_null=True)
|
||
|
|
simulation_warning = serializers.CharField(allow_null=True, allow_blank=True)
|
||
|
|
summary_metrics = serializers.JSONField()
|
||
|
|
stage_timeline = GrowthStageSerializer(many=True)
|
||
|
|
stages_page = GrowthStageSerializer(many=True)
|
||
|
|
pagination = GrowthPaginationSerializer()
|
||
|
|
daily_records_count = serializers.IntegerField()
|
||
|
|
default_page_size = serializers.IntegerField()
|