3232)
3333from database import init_db
3434
35+ # Import versioning
36+ from api .versioning import (
37+ get_version_registry ,
38+ DeprecationMiddleware ,
39+ VersionedRouter ,
40+ )
41+
3542# Import routes
36- from api .routes import documents , cases , reports , analytics , deadlines , auth , health , case_search , speech , document_verification , argument_strength , deadline_engine , efiling , hybrid_search
43+ from api .routes import documents , cases , reports , analytics , deadlines , auth , health , webhooks
3744
3845logger = structlog .get_logger (__name__ )
3946
@@ -107,6 +114,12 @@ def create_app() -> FastAPI:
107114 middleware = middleware
108115 )
109116
117+ # Initialize API versioning
118+ version_registry = get_version_registry ()
119+
120+ # Add deprecation middleware for API responses
121+ app .add_middleware (DeprecationMiddleware )
122+
110123 # Initialize validation config from settings
111124 ValidationConfig .from_settings (settings )
112125
@@ -128,31 +141,36 @@ def create_app() -> FastAPI:
128141 # Include Routers
129142 # ========================================================================
130143
144+ # Create versioned router
145+ versioned_router = VersionedRouter (prefix = "/api" , default_version = "v1" )
146+
147+ # Health check (no versioning)
131148 app .include_router (health .router )
132- app .include_router (documents .router )
133- app .include_router (cases .router )
134- app .include_router (reports .router )
135- app .include_router (analytics .router )
136- app .include_router (deadlines .router )
137- app .include_router (auth .router )
138- app .include_router (case_search .router ) # Case search and precedent matching
139- app .include_router (speech .router )
140- app .include_router (document_verification .router )
141- app .include_router (argument_strength .router )
142- app .include_router (deadline_engine .router )
143- app .include_router (efiling .router )
144- app .include_router (hybrid_search .router ) # Cross-jurisdictional hybrid search (RRF + re-ranking)
149+
150+ # API v1 routes (prefixed with /api/v1)
151+ v1_router = APIRouter (prefix = "/api/v1" )
152+ v1_router .include_router (documents .router , prefix = "/documents" )
153+ v1_router .include_router (cases .router , prefix = "/cases" )
154+ v1_router .include_router (reports .router , prefix = "/reports" )
155+ v1_router .include_router (analytics .router , prefix = "/analytics" )
156+ v1_router .include_router (deadlines .router , prefix = "/deadlines" )
157+ v1_router .include_router (auth .router , prefix = "/auth" )
158+ v1_router .include_router (webhooks .router , prefix = "/webhooks" )
159+ app .include_router (v1_router )
160+
161+ # API v2 routes (with backward compatibility)
162+ v2_router = APIRouter (prefix = "/api/v2" )
163+ v2_router .include_router (documents .router , prefix = "/documents" )
164+ v2_router .include_router (cases .router , prefix = "/cases" )
165+ v2_router .include_router (reports .router , prefix = "/reports" )
166+ v2_router .include_router (analytics .router , prefix = "/analytics" )
167+ v2_router .include_router (deadlines .router , prefix = "/deadlines" )
168+ v2_router .include_router (auth .router , prefix = "/auth" )
169+ v2_router .include_router (webhooks .router , prefix = "/webhooks" )
170+ app .include_router (v2_router )
145171 # Model feedback & optimization
146172 from api .routes import models as models_router
147173 app .include_router (models_router .router )
148-
149- # HA WebSocket endpoints (multiplexing, reconnection, Redis bridge)
150- from api .websockets .router import register_ha_websocket_endpoints
151- register_ha_websocket_endpoints (app )
152-
153- # Legacy case-timeline WebSocket endpoint
154- from api .websockets .case_timeline import register_case_timeline_endpoint
155- register_case_timeline_endpoint (app )
156174
157175 # ========================================================================
158176 # Global Exception Handlers
@@ -343,4 +361,4 @@ def __getattr__(name):
343361 port = get_settings ().API_PORT ,
344362 workers = get_settings ().API_WORKERS ,
345363 reload = True
346- )
364+ )
0 commit comments