Files
thrillwiki_django_no_react/backend/thrillwiki/urls.py
pacnpal d504d41de2 feat: complete monorepo structure with frontend and shared resources
- Add complete backend/ directory with full Django application
- Add frontend/ directory with Vite + TypeScript setup ready for Next.js
- Add comprehensive shared/ directory with:
  - Complete documentation and memory-bank archives
  - Media files and avatars (letters, park/ride images)
  - Deployment scripts and automation tools
  - Shared types and utilities
- Add architecture/ directory with migration guides
- Configure pnpm workspace for monorepo development
- Update .gitignore to exclude .django_tailwind_cli/ build artifacts
- Preserve all historical documentation in shared/docs/memory-bank/
- Set up proper structure for full-stack development with shared resources
2025-08-23 18:40:07 -04:00

202 lines
5.9 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
# Import enhanced health check views
try:
from apps.core.views.health_views import (
HealthCheckAPIView,
PerformanceMetricsView,
SimpleHealthView,
)
HAS_HEALTH_VIEWS = True
except ImportError:
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")),
# API URLs (before app URLs to avoid conflicts)
path("api/v1/", include("apps.parks.api.urls", namespace="parks_api")),
path("api/v1/", include("apps.rides.api.urls", namespace="rides_api")),
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",
),
]
)
# Add enhanced health check URLs if available
if HAS_HEALTH_VIEWS:
urlpatterns.extend(
[
path("health/api/", HealthCheckAPIView.as_view(), name="health-api"),
path(
"health/simple/",
SimpleHealthView.as_view(),
name="health-simple",
),
path(
"health/metrics/",
PerformanceMetricsView.as_view(),
name="health-metrics",
),
]
)
# 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"