2026-04-10 16:12:51 +03:30
|
|
|
from rest_framework import serializers
|
|
|
|
|
|
2026-04-11 03:54:15 +03:30
|
|
|
from .mock_data import CONFIG_SLIDERS_ONLY
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
START_ENVIRONMENT_KEYS = [
|
|
|
|
|
item["key"]
|
|
|
|
|
for item in CONFIG_SLIDERS_ONLY["sliders"]
|
|
|
|
|
if item["key"] != "growth_speed"
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _defaults_from_sliders():
|
|
|
|
|
return {
|
|
|
|
|
item["key"]: item["default_value"]
|
|
|
|
|
for item in CONFIG_SLIDERS_ONLY["sliders"]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
START_REQUEST_EXAMPLE = {
|
|
|
|
|
"environment": {
|
|
|
|
|
key: value for key, value in _defaults_from_sliders().items() if key != "growth_speed"
|
|
|
|
|
},
|
|
|
|
|
"growth_speed": _defaults_from_sliders().get("growth_speed", 1.5),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
START_REQUEST_EXAMPLE_STATIC = {
|
|
|
|
|
"environment": {
|
|
|
|
|
"light": 75,
|
|
|
|
|
"water": 65,
|
|
|
|
|
"soil_ph": 6.5,
|
|
|
|
|
},
|
|
|
|
|
"growth_speed": 1.5,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def success_response():
|
|
|
|
|
return {"status": "success"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def success_with_data(data):
|
|
|
|
|
return {"status": "success", "data": data}
|
|
|
|
|
|
2026-04-10 16:12:51 +03:30
|
|
|
|
|
|
|
|
class YieldPredictionCardSerializer(serializers.Serializer):
|
|
|
|
|
id = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
title = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
subtitle = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
stats = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
avatarColor = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
avatarIcon = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
chipText = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
chipColor = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ChartSeriesSerializer(serializers.Serializer):
|
|
|
|
|
name = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
data = serializers.ListField(child=serializers.FloatField(), required=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ChartSummaryItemSerializer(serializers.Serializer):
|
|
|
|
|
title = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
subtitle = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
amount = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
avatarColor = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
avatarIcon = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class YieldPredictionChartSerializer(serializers.Serializer):
|
|
|
|
|
categories = serializers.ListField(child=serializers.CharField(), required=False)
|
|
|
|
|
series = ChartSeriesSerializer(many=True, required=False)
|
|
|
|
|
summary = ChartSummaryItemSerializer(many=True, required=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class HarvestPredictionCardSerializer(serializers.Serializer):
|
|
|
|
|
date = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
dateFormatted = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
daysUntil = serializers.IntegerField(required=False)
|
|
|
|
|
description = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
optimalWindowStart = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
optimalWindowEnd = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class YieldHarvestSummarySerializer(serializers.Serializer):
|
|
|
|
|
yield_prediction_card = YieldPredictionCardSerializer(required=False)
|
|
|
|
|
yield_prediction_chart = YieldPredictionChartSerializer(required=False)
|
|
|
|
|
harvest_prediction_card = HarvestPredictionCardSerializer(required=False)
|