Files
Backend/sensor_hub/serializers.py
T

64 lines
2.0 KiB
Python
Raw Normal View History

2026-02-19 01:19:22 +03:30
from rest_framework import serializers
2026-03-23 22:24:30 +03:30
from .models import Sensor
class SensorSerializer(serializers.ModelSerializer):
last_updated = serializers.DateTimeField(source="updated_at", read_only=True)
class Meta:
model = Sensor
fields = [
"uuid_sensor",
"name",
"is_active",
"specifications",
"power_source",
"customized_sensors",
"last_updated",
]
read_only_fields = ["uuid_sensor", "last_updated"]
class SensorCreateSerializer(serializers.ModelSerializer):
2026-03-29 15:07:14 +03:30
area_geojson = serializers.JSONField(write_only=True, required=False)
2026-03-23 22:24:30 +03:30
class Meta:
model = Sensor
fields = [
"name",
"specifications",
"power_source",
"customized_sensors",
2026-03-29 15:07:14 +03:30
"area_geojson",
2026-03-23 22:24:30 +03:30
]
2026-03-26 15:39:31 +03:30
2026-03-29 15:07:14 +03:30
def validate_area_geojson(self, value):
if not isinstance(value, dict):
raise serializers.ValidationError("`area_geojson` must be a GeoJSON object.")
geometry = value.get("geometry") if value.get("type") == "Feature" else value
if not isinstance(geometry, dict):
raise serializers.ValidationError("`area_geojson.geometry` is required.")
if geometry.get("type") != "Polygon":
raise serializers.ValidationError("`area_geojson.geometry.type` must be `Polygon`.")
coordinates = geometry.get("coordinates")
if not isinstance(coordinates, list) or not coordinates or not isinstance(coordinates[0], list):
raise serializers.ValidationError("`area_geojson.geometry.coordinates` must be a polygon ring.")
return value
2026-03-30 23:29:03 +03:30
def create(self, validated_data):
validated_data.pop("area_geojson", None)
return super().create(validated_data)
def update(self, instance, validated_data):
validated_data.pop("area_geojson", None)
return super().update(instance, validated_data)
2026-03-26 15:39:31 +03:30
class SensorToggleSerializer(serializers.Serializer):
uuid_sensor = serializers.UUIDField()