98 lines
3.0 KiB
Python
98 lines
3.0 KiB
Python
from rest_framework import serializers
|
|
|
|
from .models import SoilDepthData, SoilLocation
|
|
|
|
|
|
class SoilDataRequestSerializer(serializers.Serializer):
|
|
"""سریالایزر ورودی: lon و lat برای درخواست داده خاک."""
|
|
|
|
lon = serializers.DecimalField(max_digits=9, decimal_places=6, required=True)
|
|
lat = serializers.DecimalField(max_digits=9, decimal_places=6, required=True)
|
|
|
|
|
|
class SoilDepthDataSerializer(serializers.ModelSerializer):
|
|
"""سریالایزر خروجی برای هر عمق خاک."""
|
|
|
|
class Meta:
|
|
model = SoilDepthData
|
|
fields = [
|
|
"depth_label",
|
|
"bdod",
|
|
"cec",
|
|
"cfvo",
|
|
"clay",
|
|
"nitrogen",
|
|
"ocd",
|
|
"ocs",
|
|
"phh2o",
|
|
"sand",
|
|
"silt",
|
|
"soc",
|
|
"wv0010",
|
|
"wv0033",
|
|
"wv1500",
|
|
]
|
|
|
|
|
|
class SoilLocationResponseSerializer(serializers.ModelSerializer):
|
|
"""سریالایزر خروجی برای SoilLocation همراه با depths."""
|
|
|
|
lon = serializers.DecimalField(
|
|
source="longitude",
|
|
max_digits=9,
|
|
decimal_places=6,
|
|
read_only=True,
|
|
)
|
|
lat = serializers.DecimalField(
|
|
source="latitude",
|
|
max_digits=9,
|
|
decimal_places=6,
|
|
read_only=True,
|
|
)
|
|
depths = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = SoilLocation
|
|
fields = ["id", "lon", "lat", "depths"]
|
|
|
|
def get_depths(self, obj):
|
|
from .tasks import DEPTHS
|
|
|
|
depth_qs = obj.depths.all()
|
|
order = {d: i for i, d in enumerate(DEPTHS)}
|
|
sorted_depths = sorted(
|
|
depth_qs, key=lambda d: order.get(d.depth_label, 99)
|
|
)
|
|
return SoilDepthDataSerializer(sorted_depths, many=True).data
|
|
|
|
|
|
class SoilDataTaskResponseSerializer(serializers.Serializer):
|
|
"""سریالایزر خروجی وقتی تسک در صف قرار گرفته (۲۰۲)."""
|
|
|
|
source = serializers.CharField(default="task")
|
|
task_id = serializers.CharField()
|
|
lon = serializers.FloatField(source="longitude")
|
|
lat = serializers.FloatField(source="latitude")
|
|
status_url = serializers.CharField(required=False)
|
|
|
|
|
|
class NdviHealthRequestSerializer(serializers.Serializer):
|
|
farm_uuid = serializers.UUIDField(required=True, help_text="شناسه یکتای مزرعه")
|
|
|
|
|
|
class NdviHealthDataItemSerializer(serializers.Serializer):
|
|
title = serializers.CharField()
|
|
value = serializers.JSONField()
|
|
color = serializers.CharField()
|
|
icon = serializers.CharField()
|
|
|
|
|
|
class NdviHealthResponseSerializer(serializers.Serializer):
|
|
ndviIndex = serializers.FloatField(allow_null=True, required=False)
|
|
mean_ndvi = serializers.FloatField(allow_null=True)
|
|
ndvi_map = serializers.JSONField()
|
|
vegetation_health_class = serializers.CharField(allow_null=True)
|
|
observation_date = serializers.CharField(allow_null=True)
|
|
satellite_source = serializers.CharField(allow_null=True)
|
|
healthData = NdviHealthDataItemSerializer(many=True)
|