Files

62 lines
2.2 KiB
Python
Raw Permalink Normal View History

2026-03-26 15:39:31 +03:30
from rest_framework import serializers
2026-05-05 21:01:58 +03:30
from .defaults import VALID_CARD_IDS, VALID_ROW_IDS
2026-03-26 15:39:31 +03:30
class FarmDashboardConfigSerializer(serializers.Serializer):
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(read_only=True)
2026-03-26 15:39:31 +03:30
disabled_card_ids = serializers.ListField(
child=serializers.CharField(),
allow_empty=True,
)
row_order = serializers.ListField(
child=serializers.CharField(),
allow_empty=False,
)
enable_drag_reorder = serializers.BooleanField()
def validate_disabled_card_ids(self, value):
invalid_ids = [card_id for card_id in value if card_id not in VALID_CARD_IDS]
if invalid_ids:
raise serializers.ValidationError(
f"Invalid card IDs: {', '.join(invalid_ids)}."
)
if len(set(value)) != len(value):
raise serializers.ValidationError("disabled_card_ids must not contain duplicates.")
return value
def validate_row_order(self, value):
invalid_ids = [row_id for row_id in value if row_id not in VALID_ROW_IDS]
if invalid_ids:
raise serializers.ValidationError(
f"Invalid row IDs: {', '.join(invalid_ids)}."
)
if len(set(value)) != len(value):
raise serializers.ValidationError("row_order must not contain duplicates.")
if set(value) != set(VALID_ROW_IDS):
raise serializers.ValidationError(
"row_order must contain each valid row ID exactly once."
)
return value
class FarmDashboardConfigPatchSerializer(FarmDashboardConfigSerializer):
2026-04-02 23:25:39 +03:30
farm_uuid = serializers.UUIDField(required=True)
2026-03-26 15:39:31 +03:30
disabled_card_ids = serializers.ListField(
child=serializers.CharField(),
allow_empty=True,
required=False,
)
row_order = serializers.ListField(
child=serializers.CharField(),
allow_empty=False,
required=False,
)
enable_drag_reorder = serializers.BooleanField(required=False)
def validate(self, attrs):
attrs = super().validate(attrs)
2026-04-02 23:25:39 +03:30
if set(attrs.keys()) == {"farm_uuid"}:
2026-03-26 15:39:31 +03:30
raise serializers.ValidationError("At least one config field must be provided.")
return attrs