""" URL configuration for ThrillWiki API v1. This module provides unified API routing following RESTful conventions and DRF Router patterns for automatic URL generation. """ from django.urls import path, include from rest_framework.routers import DefaultRouter from drf_spectacular.views import ( SpectacularAPIView, SpectacularSwaggerView, SpectacularRedocView, ) from .viewsets import ( ParkViewSet, RideViewSet, ParkReadOnlyViewSet, RideReadOnlyViewSet, LoginAPIView, SignupAPIView, LogoutAPIView, CurrentUserAPIView, PasswordResetAPIView, PasswordChangeAPIView, SocialProvidersAPIView, AuthStatusAPIView, HealthCheckAPIView, PerformanceMetricsAPIView, SimpleHealthAPIView, # History viewsets ParkHistoryViewSet, RideHistoryViewSet, UnifiedHistoryViewSet, # New comprehensive viewsets ParkAreaViewSet, ParkLocationViewSet, CompanyViewSet, RideModelViewSet, RollerCoasterStatsViewSet, RideLocationViewSet, RideReviewViewSet, UserProfileViewSet, TopListViewSet, TopListItemViewSet, ) # Create the main API router router = DefaultRouter() # Register ViewSets with descriptive prefixes # Core models router.register(r"parks", ParkViewSet, basename="park") router.register(r"rides", RideViewSet, basename="ride") # Park-related models router.register(r"park-areas", ParkAreaViewSet, basename="park-area") router.register(r"park-locations", ParkLocationViewSet, basename="park-location") # Company models router.register(r"companies", CompanyViewSet, basename="company") # Ride-related models router.register(r"ride-models", RideModelViewSet, basename="ride-model") router.register( r"roller-coaster-stats", RollerCoasterStatsViewSet, basename="roller-coaster-stats" ) router.register(r"ride-locations", RideLocationViewSet, basename="ride-location") router.register(r"ride-reviews", RideReviewViewSet, basename="ride-review") # User-related models router.register(r"user-profiles", UserProfileViewSet, basename="user-profile") router.register(r"top-lists", TopListViewSet, basename="top-list") router.register(r"top-list-items", TopListItemViewSet, basename="top-list-item") # Register read-only endpoints for reference data router.register(r"ref/parks", ParkReadOnlyViewSet, basename="park-ref") router.register(r"ref/rides", RideReadOnlyViewSet, basename="ride-ref") app_name = "api_v1" urlpatterns = [ # API Documentation endpoints path("schema/", SpectacularAPIView.as_view(), name="schema"), path( "docs/", SpectacularSwaggerView.as_view(url_name="api_v1:schema"), name="swagger-ui", ), path( "redoc/", SpectacularRedocView.as_view(url_name="api_v1:schema"), name="redoc" ), # Authentication endpoints path("auth/login/", LoginAPIView.as_view(), name="login"), path("auth/signup/", SignupAPIView.as_view(), name="signup"), path("auth/logout/", LogoutAPIView.as_view(), name="logout"), path("auth/user/", CurrentUserAPIView.as_view(), name="current-user"), path("auth/password/reset/", PasswordResetAPIView.as_view(), name="password-reset"), path( "auth/password/change/", PasswordChangeAPIView.as_view(), name="password-change" ), path("auth/providers/", SocialProvidersAPIView.as_view(), name="social-providers"), path("auth/status/", AuthStatusAPIView.as_view(), name="auth-status"), # Health check endpoints path("health/", HealthCheckAPIView.as_view(), name="health-check"), path("health/simple/", SimpleHealthAPIView.as_view(), name="simple-health"), path( "health/performance/", PerformanceMetricsAPIView.as_view(), name="performance-metrics", ), # History endpoints path( "history/timeline/", UnifiedHistoryViewSet.as_view({"get": "list"}), name="unified-history-timeline", ), path( "parks//history/", ParkHistoryViewSet.as_view({"get": "list"}), name="park-history-list", ), path( "parks//history/detail/", ParkHistoryViewSet.as_view({"get": "retrieve"}), name="park-history-detail", ), path( "parks//rides//history/", RideHistoryViewSet.as_view({"get": "list"}), name="ride-history-list", ), path( "parks//rides//history/detail/", RideHistoryViewSet.as_view({"get": "retrieve"}), name="ride-history-detail", ), # Include all router-generated URLs path("", include(router.urls)), ]