Files
thrillwiki_django_no_react/backend/thrillwiki/urls.py
pacnpal e4e36c7899 Add migrations for ParkPhoto and RidePhoto models with associated events
- Created ParkPhoto and ParkPhotoEvent models in the parks app, including fields for image, caption, alt text, and relationships to the Park model.
- Implemented triggers for insert and update operations on ParkPhoto to log changes in ParkPhotoEvent.
- Created RidePhoto and RidePhotoEvent models in the rides app, with similar structure and functionality as ParkPhoto.
- Added fields for photo type in RidePhoto and implemented corresponding triggers for logging changes.
- Established necessary indexes and unique constraints for both models to ensure data integrity and optimize queries.
2025-08-26 14:40:46 -04:00

178 lines
5.3 KiB
Python

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")),
# Centralized API URLs - routes through main API router
path("api/", include("api.urls")),
# All API endpoints are now consolidated under /api/v1/
# 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")),
# Note: Photo URLs now handled through centralized API at /api/v1/media/
# Legacy photo namespace removed - functionality moved to domain-specific APIs
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/<str:username>/",
accounts_views.ProfileView.as_view(),
name="user_profile",
),
path(
"profile/<str:username>/",
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
try:
from autocomplete import urls as autocomplete_urls
urlpatterns.insert(
2,
path(
"ac/",
include(
(autocomplete_urls[0], autocomplete_urls[1]),
namespace=autocomplete_urls[2],
),
),
)
except ImportError:
pass
# 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",
),
]
)
else:
# Do not add API documentation URLs if drf_spectacular is not installed
pass
# 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:
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/<path:path>",
serve,
{
"document_root": coverage_dir,
},
),
]
handler404 = "thrillwiki.views.handler404"
handler500 = "thrillwiki.views.handler500"