Files
thrillwiki_django_no_react/backend/thrillwiki/urls.py
pacnpal e62646bcf9 feat: major API restructure and Vue.js frontend integration
- Centralize API endpoints in dedicated api app with v1 versioning
- Remove individual API modules from parks and rides apps
- Add event tracking system with analytics functionality
- Integrate Vue.js frontend with Tailwind CSS v4 and TypeScript
- Add comprehensive database migrations for event tracking
- Implement user authentication and social provider setup
- Add API schema documentation and serializers
- Configure development environment with shared scripts
- Update project structure for monorepo with frontend/backend separation
2025-08-24 16:42:20 -04:00

177 lines
5.2 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")),
# 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/<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
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/<path:path>",
serve,
{
"document_root": coverage_dir,
},
),
]
handler404 = "thrillwiki.views.handler404"
handler500 = "thrillwiki.views.handler500"