3d3c2bcc57
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.
26 lines
1014 B
Python
26 lines
1014 B
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.dependencies import get_db, get_current_auth_session
|
|
from app.schemas.public_ip import PublicIPCheckResponse
|
|
from app.config import get_settings
|
|
from app.services.auth import AuthenticatedSession
|
|
from app.services.public_ip import check_public_ipv4_and_notify
|
|
|
|
router = APIRouter(tags=["public-ip"])
|
|
|
|
|
|
@router.get("/public-ip/check", response_model=PublicIPCheckResponse)
|
|
def run_public_ip_check(
|
|
session: Session = Depends(get_db),
|
|
current_auth: AuthenticatedSession | None = Depends(get_current_auth_session),
|
|
) -> PublicIPCheckResponse:
|
|
if current_auth is None:
|
|
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="authentication required")
|
|
|
|
result = check_public_ipv4_and_notify(session, bootstrap_settings=get_settings())
|
|
return PublicIPCheckResponse(
|
|
status=result.status,
|
|
checked_at=result.checked_at,
|
|
changed=result.changed,
|
|
) |