This commit is contained in:
2026-03-26 15:39:31 +03:30
parent f305e00cfe
commit 32a0e3f3d9
26 changed files with 2188 additions and 265 deletions
+59
View File
@@ -0,0 +1,59 @@
from rest_framework import serializers
from .mock_data import VALID_CARD_IDS, VALID_ROW_IDS
class FarmDashboardConfigSerializer(serializers.Serializer):
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):
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)
if not attrs:
raise serializers.ValidationError("At least one config field must be provided.")
return attrs