refactor(db)!: adopt project-routed pooled databases

Reorganize WNDB by responsibility and remove legacy scheme endpoints.\n\nRoute analysis and time-series access through project pools, preserve transactional realtime replacement, and refresh GIS materialized views after writes.\n\nAdd database architecture documentation, live pooling coverage, API contract updates, and executable container verification.\n\nBREAKING CHANGE: legacy scheme APIs and flat app.native.wndb module imports are removed.
This commit is contained in:
2026-08-25 18:35:05 +08:00
parent fdbcc5c033
commit fa188af0b1
181 changed files with 8446 additions and 33546 deletions
+7 -35
View File
@@ -7,20 +7,15 @@ from app.api.v1.endpoints import (
audit,
burst_detection,
burst_location,
extension,
geocoding,
leakage,
meta,
misc,
model_import,
project,
project_data,
risk,
scada,
schemes,
sensor_placement,
simulation,
snapshots,
web_search,
)
from app.api.v1.endpoints.components import (
@@ -45,15 +40,14 @@ from app.api.v1.endpoints.network import (
valves,
)
from app.api.v1.endpoints.timeseries import (
analysis as ts_analysis,
composite as ts_composite,
realtime as ts_realtime,
scada as ts_scada,
scheme as ts_scheme,
)
from app.auth.permissions import (
BURST_RUN,
OPTIMIZATION_RUN,
RISK_RUN,
SCADA_CLEAN,
SCADA_VIEW,
SIMULATION_RUN,
@@ -88,7 +82,6 @@ simulation_access = Depends(
webgis_view_access = Depends(require_permission(WEBGIS_VIEW))
simulation_run_access = Depends(require_permission(SIMULATION_RUN))
burst_run_access = Depends(require_permission(BURST_RUN))
risk_run_access = Depends(require_permission(RISK_RUN))
optimization_run_access = Depends(require_permission(OPTIMIZATION_RUN))
# Core services
@@ -139,32 +132,16 @@ api_router.include_router(
tags=["Simulation Control"],
dependencies=[simulation_run_access],
)
api_router.include_router(scada.router, dependencies=[scada_access])
api_router.include_router(
scada.router,
tags=["SCADA Metadata"],
dependencies=[scada_access],
)
api_router.include_router(
sensor_placement.router,
tags=["Sensor Placement"],
dependencies=[optimization_run_access],
)
api_router.include_router(
snapshots.router,
tags=["Snapshots"],
dependencies=[simulation_access],
)
api_router.include_router(
schemes.router,
tags=["Schemes"],
dependencies=[simulation_access],
)
api_router.include_router(
misc.router,
tags=["Misc"],
dependencies=[webgis_view_access],
)
api_router.include_router(
risk.router,
tags=["Risk"],
dependencies=[risk_run_access],
)
api_router.include_router(
web_search.router,
tags=["Web Search"],
@@ -194,7 +171,7 @@ api_router.include_router(
# TimescaleDB data
for endpoint_router, tag in (
(ts_realtime.router, "TimescaleDB - Realtime"),
(ts_scheme.router, "TimescaleDB - Scheme"),
(ts_analysis.router, "TimescaleDB - Analysis"),
):
api_router.include_router(
endpoint_router,
@@ -217,8 +194,3 @@ api_router.include_router(
tags=["Project Data"],
dependencies=[webgis_view_access],
)
api_router.include_router(
extension.router,
tags=["Extension"],
dependencies=[webgis_access],
)