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
+31 -105
View File
@@ -1,5 +1,3 @@
from typing import Any
from fastapi.testclient import TestClient
from tests.conftest import build_test_app, install_stub, load_module_from_path
@@ -7,16 +5,7 @@ from tests.conftest import build_test_app, install_stub, load_module_from_path
class DummyChangeSet:
def __init__(self, operations=None):
if operations is None:
self.operations = []
elif isinstance(operations, dict):
self.operations = [operations]
else:
self.operations = operations
def _noop(*args, **kwargs):
return None
self.operations = [operations] if isinstance(operations, dict) else operations or []
def _load_regions_module(monkeypatch):
@@ -25,41 +14,18 @@ def _load_regions_module(monkeypatch):
monkeypatch,
"app.services.tjnetwork",
{
"Any": Any,
"ChangeSet": DummyChangeSet,
"add_district_metering_area": _noop,
"add_region": _noop,
"add_service_area": _noop,
"add_virtual_district": _noop,
"calculate_district_metering_area_for_network": lambda *args, **kwargs: [],
"calculate_district_metering_area_for_nodes": lambda *args, **kwargs: [],
"calculate_district_metering_area_for_region": lambda *args, **kwargs: [],
"calculate_service_area": lambda network: [],
"calculate_virtual_district": lambda *args, **kwargs: {},
"delete_district_metering_area": _noop,
"delete_region": _noop,
"delete_service_area": _noop,
"delete_virtual_district": _noop,
"generate_district_metering_area": _noop,
"generate_service_area": _noop,
"generate_sub_district_metering_area": _noop,
"generate_virtual_district": _noop,
"get_all_district_metering_area_ids": lambda network: [],
"get_all_district_metering_areas": lambda network: [],
"get_all_service_areas": lambda network: [],
"get_all_virtual_districts": lambda network: [],
"get_district_metering_area": lambda network, area_id: {},
"get_district_metering_area_schema": lambda network: {},
"get_region": lambda network, region_id: {},
"get_region_schema": lambda network: {},
"get_service_area": lambda network, area_id: {},
"get_service_area_schema": lambda network: {},
"get_virtual_district": lambda network, area_id: {},
"get_virtual_district_schema": lambda network: {},
"set_district_metering_area": _noop,
"set_region": _noop,
"set_service_area": _noop,
"set_virtual_district": _noop,
"add_region": lambda network, cs: cs,
"delete_region": lambda network, cs: cs,
"get_nodes_in_region": lambda network, region_id: ["J1"],
"get_region": lambda network, region_id: {
"id": region_id,
"region_type": "DMA",
"boundary": [[0, 0], [1, 0], [0, 0]],
},
"get_region_schema": lambda network: {"id": {"type": "str"}},
"get_regions": lambda network: ["DMA-1"],
"set_region": lambda network, cs: cs,
},
)
return load_module_from_path(
@@ -68,87 +34,47 @@ def _load_regions_module(monkeypatch):
)
def test_removed_routes_are_absent_and_return_404(monkeypatch):
def test_regions_are_exposed_as_one_generic_resource(monkeypatch):
module = _load_regions_module(monkeypatch)
client = TestClient(build_test_app(module.router, "/api/v1"))
openapi = client.get("/openapi.json").json()
assert "/api/v1/calculateregion/" not in openapi["paths"]
assert "/api/v1/getallregions/" not in openapi["paths"]
assert "/api/v1/generateregion/" not in openapi["paths"]
assert "/api/v1/calculatedistrictmeteringarea/" not in openapi["paths"]
assert client.get("/api/v1/calculateregion/", params={"network": "demo", "time_index": 0}).status_code == 404
assert client.get("/api/v1/calculatedistrictmeteringarea/", params={"network": "demo"}).status_code == 404
def test_calculate_service_area_contract_uses_only_network(monkeypatch):
module = _load_regions_module(monkeypatch)
calls = []
monkeypatch.setattr(
module,
"calculate_service_area",
lambda network: calls.append(network) or [{"source-1": ["n1", "n2"]}],
)
client = TestClient(build_test_app(module.router, "/api/v1"))
response = client.post(
"/api/v1/service-area-calculations",
params={"network": "demo", "time_index": 5},
)
schema = client.get("/openapi.json").json()
response = client.get("/api/v1/regions", params={"network": "demo"})
assert response.status_code == 200
assert response.json() == [{"source-1": ["n1", "n2"]}]
assert calls == ["demo"]
parameter_names = [
item["name"]
for item in schema["paths"]["/api/v1/service-area-calculations"]["post"]["parameters"]
]
assert parameter_names == ["network"]
assert response.json()[0]["region_type"] == "DMA"
def test_add_district_metering_area_converts_boundary_to_tuples(monkeypatch):
def test_add_region_converts_boundary_to_tuples(monkeypatch):
module = _load_regions_module(monkeypatch)
captured = {}
def fake_add(network, change_set):
captured["network"] = network
captured["boundary"] = change_set.operations[0]["boundary"]
return {"ok": True}
def add(network, changeset):
captured["operation"] = changeset.operations[0]
return changeset
monkeypatch.setattr(module, "add_district_metering_area", fake_add)
monkeypatch.setattr(module, "add_region", add)
client = TestClient(build_test_app(module.router, "/api/v1"))
response = client.post(
"/api/v1/district-metering-areas",
"/api/v1/regions",
params={"network": "demo"},
json={"id": "dma-1", "boundary": [[1, 2], [3, 4], [1, 2]]},
json={
"id": "DMA-1",
"region_type": "DMA",
"boundary": [[0, 0], [1, 0], [0, 0]],
},
)
assert response.status_code == 200
assert captured == {
"network": "demo",
"boundary": [(1, 2), (3, 4), (1, 2)],
}
assert captured["operation"]["boundary"] == [(0, 0), (1, 0), (0, 0)]
def test_generate_virtual_district_reads_centers_from_body(monkeypatch):
def test_region_nodes_use_generic_region_id(monkeypatch):
module = _load_regions_module(monkeypatch)
captured = {}
def fake_generate(network, centers, inflate_delta):
captured["args"] = (network, centers, inflate_delta)
return {"generated": True}
monkeypatch.setattr(module, "generate_virtual_district", fake_generate)
client = TestClient(build_test_app(module.router, "/api/v1"))
response = client.post(
"/api/v1/virtual-district-generation-runs",
params={"network": "demo", "inflate_delta": 0.75},
json={"centers": ["J1", "J2"]},
response = client.get(
"/api/v1/regions/nodes", params={"network": "demo", "id": "DMA-1"}
)
assert response.status_code == 200
assert captured["args"] == ("demo", ["J1", "J2"], 0.75)
assert response.json() == ["J1"]