"""SQLAlchemy engine + session factory.""" from __future__ import annotations import os from collections.abc import Iterator from contextlib import contextmanager from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker _DEFAULT_URL = "postgresql+psycopg://cliniq:cliniq@localhost:5432/cliniq" def database_url() -> str: return os.getenv("DATABASE_URL", _DEFAULT_URL) engine = create_engine(database_url(), pool_pre_ping=True, future=True) SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, future=True) def get_session() -> Iterator[Session]: """FastAPI dependency.""" s = SessionLocal() try: yield s finally: s.close() @contextmanager def session_scope(): session = SessionLocal() try: yield session session.commit() except Exception: session.rollback() raise finally: session.close()