from typing import AsyncGenerator from fastapi import Depends from sqlalchemy.ext.asyncio import AsyncSession from fastapi_users.db import SQLAlchemyUserDatabase from ..core.db import async_session_maker, engine from ..core.base import Base from ..models.user import User, OAuthAccount _initialized = False async def get_async_session() -> AsyncGenerator[AsyncSession, None]: global _initialized if not _initialized: # Lazily ensure tables exist; helpful for test runs without migrations async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) _initialized = True async with async_session_maker() as session: yield session async def get_user_db(session: AsyncSession = Depends(get_async_session)): yield SQLAlchemyUserDatabase(session, User, OAuthAccount)