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
@@ -0,0 +1,94 @@
from app.native.wndb.core import database
def _command(statement: str) -> database.DatabaseCommand:
return database.DatabaseCommand(statement, [])
def test_database_command_has_no_removed_undo_state() -> None:
changes = [{"operation": "update", "type": "title", "value": "new"}]
command = database.DatabaseCommand("SELECT 1", changes)
assert vars(command) == {"sql": "SELECT 1", "changes": changes}
assert not hasattr(command, "undo_sql")
assert not hasattr(command, "undo_cs")
def test_direct_model_write_refreshes_materialized_views(monkeypatch) -> None:
events: list[str] = []
monkeypatch.setattr(
database,
"write",
lambda _name, _statement: events.append("write"),
)
monkeypatch.setattr(
database,
"is_project_transaction_active",
lambda _name: False,
)
monkeypatch.setattr(
database,
"refresh_materialized_views",
lambda _name: events.append("refresh"),
)
result = database.execute_command(
"project_a",
database.DatabaseCommand(
"UPDATE network.junctions SET elevation = 1",
[{"operation": "update", "type": "junction", "id": "J-1"}],
),
)
assert events == ["write", "refresh"]
assert result.operations == [
{"operation": "update", "type": "junction", "id": "J-1"}
]
def test_batch_model_write_defers_materialized_view_refresh(monkeypatch) -> None:
events: list[str] = []
monkeypatch.setattr(
database,
"write",
lambda _name, _statement: events.append("write"),
)
monkeypatch.setattr(
database,
"is_project_transaction_active",
lambda _name: True,
)
monkeypatch.setattr(
database,
"refresh_materialized_views",
lambda _name: events.append("refresh"),
)
database.execute_command(
"project_a",
_command("UPDATE network.junctions SET elevation = 1"),
)
assert events == ["write"]
def test_non_gis_model_write_does_not_refresh_materialized_views(monkeypatch) -> None:
events: list[str] = []
monkeypatch.setattr(
database,
"write",
lambda _name, _statement: events.append("write"),
)
monkeypatch.setattr(
database,
"refresh_materialized_views",
lambda _name: events.append("refresh"),
)
database.execute_command(
"project_a",
_command("UPDATE network.time_settings SET value = '01:00'"),
)
assert events == ["write"]