This commit is contained in:
pacnpal
2026-01-02 07:58:58 -05:00
parent b243b17af7
commit 1adba1b804
36 changed files with 6345 additions and 6 deletions

View File

@@ -208,6 +208,9 @@ class RideDetailOutputSerializer(serializers.Serializer):
banner_image = serializers.SerializerMethodField()
card_image = serializers.SerializerMethodField()
# Former names (name history)
former_names = serializers.SerializerMethodField()
# URL
url = serializers.SerializerMethodField()
@@ -406,6 +409,24 @@ class RideDetailOutputSerializer(serializers.Serializer):
return None
@extend_schema_field(serializers.ListField(child=serializers.DictField()))
def get_former_names(self, obj):
"""Get the former names (name history) for this ride."""
from apps.rides.models import RideNameHistory
former_names = RideNameHistory.objects.filter(ride=obj).order_by("-to_year", "-from_year")
return [
{
"id": entry.id,
"former_name": entry.former_name,
"from_year": entry.from_year,
"to_year": entry.to_year,
"reason": entry.reason,
}
for entry in former_names
]
class RideImageSettingsInputSerializer(serializers.Serializer):
"""Input serializer for setting ride banner and card images."""
@@ -841,3 +862,37 @@ class RideReviewUpdateInputSerializer(serializers.Serializer):
if value and value > timezone.now().date():
raise serializers.ValidationError("Visit date cannot be in the future")
return value
# === RIDE NAME HISTORY SERIALIZERS ===
class RideNameHistoryOutputSerializer(serializers.Serializer):
"""Output serializer for ride name history (former names)."""
id = serializers.IntegerField()
former_name = serializers.CharField()
from_year = serializers.IntegerField(allow_null=True)
to_year = serializers.IntegerField(allow_null=True)
reason = serializers.CharField()
created_at = serializers.DateTimeField()
class RideNameHistoryCreateInputSerializer(serializers.Serializer):
"""Input serializer for creating ride name history entries."""
former_name = serializers.CharField(max_length=200)
from_year = serializers.IntegerField(required=False, allow_null=True, min_value=1800, max_value=2100)
to_year = serializers.IntegerField(required=False, allow_null=True, min_value=1800, max_value=2100)
reason = serializers.CharField(max_length=500, required=False, allow_blank=True, default="")
def validate(self, attrs):
"""Validate year range."""
from_year = attrs.get("from_year")
to_year = attrs.get("to_year")
if from_year and to_year and from_year > to_year:
raise serializers.ValidationError("From year cannot be after to year")
return attrs