from fastapi import APIRouter, HTTPException, Request from app.services.db import health_check router = APIRouter() def _startup_payload(request: Request) -> dict: return { "started": bool(getattr(request.app.state, "startup_started", False)), "complete": bool(getattr(request.app.state, "startup_complete", False)), "error": getattr(request.app.state, "startup_error", None), "warnings": dict(getattr(request.app.state, "background_warnings", {}) or {}), } def _readiness_payload(request: Request) -> tuple[bool, dict]: db_ok = health_check() startup = _startup_payload(request) ready = db_ok and startup["complete"] and not startup["error"] payload = { "status": "ok" if ready else "not_ready", "db": "ok" if db_ok else "unavailable", "startup": startup, } return ready, payload @router.get("/health/live") def liveness(): return {"status": "ok"} @router.get("/health/ready") def readiness(request: Request): ready, payload = _readiness_payload(request) if not ready: raise HTTPException(status_code=503, detail=payload) return payload @router.get("/health") def health(request: Request): return readiness(request)