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

@@ -32,9 +32,18 @@ from .shared import ModelChoices
"roles": ["OPERATOR", "PROPERTY_OWNER"],
"description": "Theme park operator based in Ohio",
"website": "https://cedarfair.com",
"founded_date": "1983-01-01",
"person_type": "CORPORATION",
"status": "ACTIVE",
"founded_year": 1983,
"founded_date": "1983-05-01",
"founded_date_precision": "MONTH",
"logo_url": "https://example.com/logo.png",
"banner_image_url": "https://example.com/banner.jpg",
"card_image_url": "https://example.com/card.jpg",
"average_rating": 4.5,
"review_count": 150,
"parks_count": 11,
"rides_count": 0,
"coasters_count": 0,
},
)
]
@@ -42,15 +51,35 @@ from .shared import ModelChoices
class CompanyDetailOutputSerializer(serializers.Serializer):
"""Output serializer for company details."""
# Core fields
id = serializers.IntegerField()
name = serializers.CharField()
slug = serializers.CharField()
roles = serializers.ListField(child=serializers.CharField())
description = serializers.CharField()
website = serializers.URLField()
website = serializers.URLField(required=False, allow_blank=True)
# Entity type and status (ported from legacy)
person_type = serializers.CharField(required=False, allow_blank=True)
status = serializers.CharField()
# Founding information
founded_year = serializers.IntegerField(allow_null=True)
founded_date = serializers.DateField(allow_null=True)
founded_date_precision = serializers.CharField(required=False, allow_blank=True)
# Image URLs
logo_url = serializers.URLField(required=False, allow_blank=True)
banner_image_url = serializers.URLField(required=False, allow_blank=True)
card_image_url = serializers.URLField(required=False, allow_blank=True)
# Rating and review aggregates
average_rating = serializers.DecimalField(max_digits=3, decimal_places=2, allow_null=True)
review_count = serializers.IntegerField()
# Counts
parks_count = serializers.IntegerField()
rides_count = serializers.IntegerField()
coasters_count = serializers.IntegerField()
# Metadata
created_at = serializers.DateTimeField()
@@ -67,7 +96,31 @@ class CompanyCreateInputSerializer(serializers.Serializer):
)
description = serializers.CharField(allow_blank=True, default="")
website = serializers.URLField(required=False, allow_blank=True)
# Entity type and status
person_type = serializers.ChoiceField(
choices=["INDIVIDUAL", "FIRM", "ORGANIZATION", "CORPORATION", "PARTNERSHIP", "GOVERNMENT"],
required=False,
allow_blank=True,
)
status = serializers.ChoiceField(
choices=["ACTIVE", "DEFUNCT", "MERGED", "ACQUIRED", "RENAMED", "DORMANT"],
default="ACTIVE",
)
# Founding information
founded_year = serializers.IntegerField(required=False, allow_null=True)
founded_date = serializers.DateField(required=False, allow_null=True)
founded_date_precision = serializers.ChoiceField(
choices=["YEAR", "MONTH", "DAY"],
required=False,
allow_blank=True,
)
# Image URLs
logo_url = serializers.URLField(required=False, allow_blank=True)
banner_image_url = serializers.URLField(required=False, allow_blank=True)
card_image_url = serializers.URLField(required=False, allow_blank=True)
class CompanyUpdateInputSerializer(serializers.Serializer):
@@ -80,7 +133,31 @@ class CompanyUpdateInputSerializer(serializers.Serializer):
)
description = serializers.CharField(allow_blank=True, required=False)
website = serializers.URLField(required=False, allow_blank=True)
# Entity type and status
person_type = serializers.ChoiceField(
choices=["INDIVIDUAL", "FIRM", "ORGANIZATION", "CORPORATION", "PARTNERSHIP", "GOVERNMENT"],
required=False,
allow_blank=True,
)
status = serializers.ChoiceField(
choices=["ACTIVE", "DEFUNCT", "MERGED", "ACQUIRED", "RENAMED", "DORMANT"],
required=False,
)
# Founding information
founded_year = serializers.IntegerField(required=False, allow_null=True)
founded_date = serializers.DateField(required=False, allow_null=True)
founded_date_precision = serializers.ChoiceField(
choices=["YEAR", "MONTH", "DAY"],
required=False,
allow_blank=True,
)
# Image URLs
logo_url = serializers.URLField(required=False, allow_blank=True)
banner_image_url = serializers.URLField(required=False, allow_blank=True)
card_image_url = serializers.URLField(required=False, allow_blank=True)
# === RIDE MODEL SERIALIZERS ===

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