Spaces:
Running
Running
| """ | |
| MediGuard AI — Database layer | |
| Provides SQLAlchemy engine/session factories and the declarative Base. | |
| """ | |
| from __future__ import annotations | |
| from collections.abc import Generator | |
| from functools import lru_cache | |
| from sqlalchemy import create_engine | |
| from sqlalchemy.orm import DeclarativeBase, Session, sessionmaker | |
| from src.settings import get_settings | |
| class Base(DeclarativeBase): | |
| """Shared declarative base for all ORM models.""" | |
| pass | |
| def _engine(): | |
| settings = get_settings() | |
| return create_engine( | |
| settings.postgres.database_url, | |
| pool_pre_ping=True, | |
| pool_size=5, | |
| max_overflow=10, | |
| echo=settings.debug, | |
| ) | |
| def _session_factory() -> sessionmaker[Session]: | |
| return sessionmaker(bind=_engine(), autocommit=False, autoflush=False) | |
| def get_db() -> Generator[Session, None, None]: | |
| """FastAPI dependency — yields a DB session and commits/rolls back.""" | |
| session = _session_factory()() | |
| try: | |
| yield session | |
| session.commit() | |
| except Exception: | |
| session.rollback() | |
| raise | |
| finally: | |
| session.close() | |