import os from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker from sqlalchemy.pool import StaticPool from database.models import Base import logging logger = logging.getLogger(__name__) DATABASE_URL = os.getenv("DATABASE_URL", "sqlite+aiosqlite:///./data/sage_dataven.db") engine = create_async_engine( DATABASE_URL, echo=False, future=True, connect_args={"check_same_thread": False}, poolclass=StaticPool, ) async_session_factory = async_sessionmaker( engine, class_=AsyncSession, expire_on_commit=False, autoflush=False, ) async def init_db(): """ Crée toutes les tables dans la base de données Utilise create_all qui ne crée QUE les tables manquantes """ try: async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) logger.info(" Base de données initialisée avec succès") logger.info(f" Fichier DB: {DATABASE_URL}") except Exception as e: logger.error(f" Erreur initialisation DB: {e}") raise async def get_session() -> AsyncSession: """Dependency FastAPI pour obtenir une session DB""" async with async_session_factory() as session: try: yield session finally: await session.close() async def close_db(): """Ferme proprement toutes les connexions""" await engine.dispose() logger.info(" Connexions DB fermées")