from django.contrib import admin from django.urls import path, include from django.conf import settings from django.conf.urls.static import static from django.views.static import serve from apps.accounts import views as accounts_views from django.views.generic import TemplateView from .views import HomeView from . import views import os # Import API documentation views try: from drf_spectacular.views import ( SpectacularAPIView, SpectacularSwaggerView, SpectacularRedocView, ) HAS_SPECTACULAR = True except ImportError: HAS_SPECTACULAR = False # Health check views are now consolidated in the API v1 HAS_HEALTH_VIEWS = False # Import autocomplete URLs try: from autocomplete import urls as autocomplete_urls HAS_AUTOCOMPLETE = True except ImportError: HAS_AUTOCOMPLETE = False # Build URL patterns list dynamically urlpatterns = [ path("admin/", admin.site.urls), # Main app URLs path("", HomeView.as_view(), name="home"), # Health Check URLs path("health/", include("health_check.urls")), # New Consolidated API v1 URLs path("api/v1/", include("apps.api.v1.urls", namespace="api_v1")), # All API endpoints are now consolidated under /api/v1/ path( "api/v1/map/", include("apps.core.urls.map_urls", namespace="map_api") ), # Map API URLs # Parks and Rides URLs path("parks/", include("apps.parks.urls", namespace="parks")), # Global rides URLs path("rides/", include("apps.rides.urls", namespace="rides")), # Operators URLs path("operators/", include("apps.parks.urls", namespace="operators")), # Other URLs path("photos/", include("apps.media.urls", namespace="photos")), # Add photos URLs path("search/", include("apps.core.urls.search", namespace="search")), path("maps/", include("apps.core.urls.maps", namespace="maps")), # Map HTML views path( "terms/", TemplateView.as_view(template_name="pages/terms.html"), name="terms", ), path( "privacy/", TemplateView.as_view(template_name="pages/privacy.html"), name="privacy", ), # Custom authentication URLs first (to override allauth defaults) path("accounts/", include("apps.accounts.urls")), # Default allauth URLs (for social auth and other features) path("accounts/", include("allauth.urls")), path( "accounts/email-required/", accounts_views.email_required, name="email_required", ), # User profile URLs path( "user//", accounts_views.ProfileView.as_view(), name="user_profile", ), path( "profile//", accounts_views.ProfileView.as_view(), name="profile", ), path("settings/", accounts_views.SettingsView.as_view(), name="settings"), # Redirect /user/ to the user's profile if logged in path("user/", accounts_views.user_redirect_view, name="user_redirect"), # Moderation URLs - placed after other URLs but before static/media serving path("moderation/", include("apps.moderation.urls", namespace="moderation")), path( "env-settings/", views.environment_and_settings_view, name="environment_and_settings", ), ] # Add autocomplete URLs if available if HAS_AUTOCOMPLETE: urlpatterns.insert( 2, path( "ac/", include( (autocomplete_urls[0], autocomplete_urls[1]), namespace=autocomplete_urls[2], ), ), ) # Add API Documentation URLs if available if HAS_SPECTACULAR: urlpatterns.extend( [ path("api/schema/", SpectacularAPIView.as_view(), name="schema"), path( "api/docs/", SpectacularSwaggerView.as_view(url_name="schema"), name="swagger-ui", ), path( "api/redoc/", SpectacularRedocView.as_view(url_name="schema"), name="redoc", ), ] ) # Health check API endpoints are now available at /api/v1/health/ # Serve static files in development if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # Development monitoring URLs try: import debug_toolbar urlpatterns = [ path("__debug__/", include(debug_toolbar.urls)), ] + urlpatterns except ImportError: pass try: pass urlpatterns += [path("silk/", include("silk.urls", namespace="silk"))] except ImportError: pass # Serve test coverage reports in development coverage_dir = os.path.join(settings.BASE_DIR, "tests", "coverage_html") if os.path.exists(coverage_dir): urlpatterns += [ path( "coverage/", serve, {"document_root": coverage_dir, "path": "index.html"}, ), path( "coverage/", serve, { "document_root": coverage_dir, }, ), ] handler404 = "thrillwiki.views.handler404" handler500 = "thrillwiki.views.handler500"