Files
thrillwiki_django_no_react/backend/apps/api/v1/serializers/stats.py

72 lines
4.4 KiB
Python

"""
Statistics serializers for ThrillWiki API.
Provides serialization for platform statistics data.
"""
from rest_framework import serializers
class StatsSerializer(serializers.Serializer):
"""
Serializer for platform statistics response.
This serializer defines the structure of the statistics API response,
including all the various counts and breakdowns available.
"""
# Core entity counts
total_parks = serializers.IntegerField(help_text="Total number of parks in the database")
total_rides = serializers.IntegerField(help_text="Total number of rides in the database")
total_manufacturers = serializers.IntegerField(help_text="Total number of ride manufacturers")
total_operators = serializers.IntegerField(help_text="Total number of park operators")
total_designers = serializers.IntegerField(help_text="Total number of ride designers")
total_property_owners = serializers.IntegerField(help_text="Total number of property owners")
total_roller_coasters = serializers.IntegerField(help_text="Total number of roller coasters with detailed stats")
# Photo counts
total_photos = serializers.IntegerField(help_text="Total number of photos (parks + rides combined)")
total_park_photos = serializers.IntegerField(help_text="Total number of park photos")
total_ride_photos = serializers.IntegerField(help_text="Total number of ride photos")
# Review counts
total_reviews = serializers.IntegerField(help_text="Total number of reviews (parks + rides)")
total_park_reviews = serializers.IntegerField(help_text="Total number of park reviews")
total_ride_reviews = serializers.IntegerField(help_text="Total number of ride reviews")
# Ride category counts (optional fields since they depend on data)
roller_coasters = serializers.IntegerField(
required=False, help_text="Number of rides categorized as roller coasters"
)
dark_rides = serializers.IntegerField(required=False, help_text="Number of rides categorized as dark rides")
flat_rides = serializers.IntegerField(required=False, help_text="Number of rides categorized as flat rides")
water_rides = serializers.IntegerField(required=False, help_text="Number of rides categorized as water rides")
transport_rides = serializers.IntegerField(
required=False, help_text="Number of rides categorized as transport rides"
)
other_rides = serializers.IntegerField(required=False, help_text="Number of rides categorized as other")
# Park status counts (optional fields since they depend on data)
operating_parks = serializers.IntegerField(required=False, help_text="Number of currently operating parks")
temporarily_closed_parks = serializers.IntegerField(required=False, help_text="Number of temporarily closed parks")
permanently_closed_parks = serializers.IntegerField(required=False, help_text="Number of permanently closed parks")
under_construction_parks = serializers.IntegerField(required=False, help_text="Number of parks under construction")
demolished_parks = serializers.IntegerField(required=False, help_text="Number of demolished parks")
relocated_parks = serializers.IntegerField(required=False, help_text="Number of relocated parks")
# Ride status counts (optional fields since they depend on data)
operating_rides = serializers.IntegerField(required=False, help_text="Number of currently operating rides")
temporarily_closed_rides = serializers.IntegerField(required=False, help_text="Number of temporarily closed rides")
sbno_rides = serializers.IntegerField(required=False, help_text="Number of rides standing but not operating")
closing_rides = serializers.IntegerField(required=False, help_text="Number of rides in the process of closing")
permanently_closed_rides = serializers.IntegerField(required=False, help_text="Number of permanently closed rides")
under_construction_rides = serializers.IntegerField(required=False, help_text="Number of rides under construction")
demolished_rides = serializers.IntegerField(required=False, help_text="Number of demolished rides")
relocated_rides = serializers.IntegerField(required=False, help_text="Number of relocated rides")
# Metadata
last_updated = serializers.CharField(help_text="ISO timestamp when these statistics were last calculated")
relative_last_updated = serializers.CharField(
help_text="Human-readable relative time since last update (e.g., '2 minutes ago')"
)