""" Connexion à la base de données. La base est un simple fichier SQLite (data/stock.db) : pas de serveur de base de données à installer ou lancer, tout vit dans ce dossier comme demandé pour pouvoir développer et tester en local sans setup particulier. """ from pathlib import Path from sqlmodel import Session, SQLModel, create_engine DATA_DIR = Path(__file__).resolve().parent.parent / "data" DATA_DIR.mkdir(exist_ok=True) DATABASE_URL = f"sqlite:///{DATA_DIR / 'stock.db'}" # check_same_thread=False : nécessaire car FastAPI/Starlette peut exécuter # les routes synchrones dans un thread différent du thread principal, alors # que SQLite refuse par défaut de partager une connexion entre threads. engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) def init_db() -> None: """Crée les tables si elles n'existent pas encore. Appelé au démarrage de l'app ; ne fait rien si le schéma existe déjà (pas de perte de données).""" SQLModel.metadata.create_all(engine) def get_session(): """Dependency FastAPI : fournit une session DB à une route, et la ferme proprement une fois la requête terminée.""" with Session(engine) as session: yield session