M1-T03: unify data layer, models, deps and routes onto single app DB

Collapse the three data layers into one. app/db.py now exposes a single
Base, a cached engine bound to app_database_url with SQLite WAL enabled, and
get_engine/get_session_local/reset_db_caches/get_db_session. Delete
app/auth_db.py, app/poo_db.py and app/models/base.py. All models (auth,
config, public_ip, location, poo) inherit the one Base and register on a
single metadata. Dependencies converge to a single get_db; all routes use it.

Also update the alembic env.py files (app/location/poo) and tests that
imported the removed modules so the suite stays green, and drop the obsolete
test_legacy_style_location_db test whose flow (app reading a separate location
DB) no longer exists. Location/poo Alembic chains, adopt scripts and adoption
tests remain for M1-T04; config fields remain for M1-T05.

pytest 109 passed; ruff clean (pre-existing only); WAL verified; single
Base.metadata holds all seven tables.
This commit is contained in:
2026-06-12 16:35:07 +02:00
parent bc8dd062d5
commit 3d3c2bcc57
28 changed files with 134 additions and 335 deletions
+5 -5
View File
@@ -6,7 +6,7 @@ import pytest
import yaml
from alembic import command
from app.auth_db import reset_auth_db_caches
from app.db import reset_db_caches
from app.config import get_settings
from app.main import create_app
from scripts.app_db_adopt import APP_BASELINE_REVISION
@@ -41,7 +41,7 @@ def _configure_database_env(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) ->
monkeypatch.setenv("AUTH_BOOTSTRAP_PASSWORD", "test-password")
monkeypatch.setenv("AUTH_COOKIE_SECURE_OVERRIDE", "false")
get_settings.cache_clear()
reset_auth_db_caches()
reset_db_caches()
return {
"app_path": app_path,
@@ -165,7 +165,7 @@ def test_migration_runner_initializes_and_is_idempotent(
conn.close()
get_settings.cache_clear()
reset_auth_db_caches()
reset_db_caches()
def test_migration_runner_adopts_legacy_sqlite_without_data_loss(
@@ -194,7 +194,7 @@ def test_migration_runner_adopts_legacy_sqlite_without_data_loss(
conn.close()
get_settings.cache_clear()
reset_auth_db_caches()
reset_db_caches()
def test_app_startup_still_fails_closed_without_running_adoption(
@@ -212,4 +212,4 @@ def test_app_startup_still_fails_closed_without_running_adoption(
assert not Path(missing_app_path).exists()
get_settings.cache_clear()
reset_auth_db_caches()
reset_db_caches()