from collections.abc import AsyncGenerator from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from app.core.app_settings import settings engine = create_async_engine(settings.database_url, pool_pre_ping=True) SessionLocal = async_sessionmaker(engine, expire_on_commit=False) async def get_db() -> AsyncGenerator[AsyncSession, None]: """Konvention für alle Endpunkte: Erfolg -> commit, Exception -> rollback. Endpunkte selbst rufen kein `db.commit()`/`db.rollback()` auf, sondern verlassen sich auf diese Dependency (Review-Fund: Konvention muss zentral, nicht pro Endpunkt copy-paste sein). """ async with SessionLocal() as session: try: yield session await session.commit() except Exception: await session.rollback() raise