mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 13:51:09 -05:00
- Restructure API v1 with improved serializers organization - Add user deletion requests and moderation queue system - Implement bulk moderation operations and permissions - Add user profile enhancements with display names and avatars - Expand ride and park API endpoints with better filtering - Add manufacturer API with detailed ride relationships - Improve authentication flows and error handling - Update frontend documentation and API specifications
136 lines
4.8 KiB
Python
136 lines
4.8 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')"
|
|
)
|