"""Database engine & session factory (PostgreSQL 17 + pgvector). The engine is created lazily: importing this module never opens a connection, so the app boots (and ``/api/health`` reports) even when the database is momentarily unavailable. """ from __future__ import annotations from collections.abc import Generator from sqlalchemy import create_engine, text from sqlalchemy.orm import DeclarativeBase, Session, sessionmaker from app.config import get_settings class Base(DeclarativeBase): pass engine = create_engine(get_settings().database_url, pool_pre_ping=True, future=True) SessionLocal = sessionmaker(bind=engine, autoflush=False, expire_on_commit=False, future=True) def get_db() -> Generator[Session, None, None]: """FastAPI dependency yielding a database session.""" db = SessionLocal() try: yield db finally: db.close() def db_available() -> bool: """Cheap liveness probe used by ``/api/health``.""" try: with engine.connect() as conn: conn.execute(text("SELECT 1")) return True except Exception: return False