"""Configuration centralisée de la base de données. Ce fichier gère le chemin de la base de données et définit les tables SQLAlchemy. Le frontend et le backend utilisent la MÊME base de données partagée. """ import os from pathlib import Path from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from datetime import datetime # #region agent log def write_debug_log(hypothesisId: str, location: str, message: str, data: dict = None): """Écrit un log NDJSON pour le debug.""" import json log_entry = { "sessionId": "debug-session", "runId": "run1", "hypothesisId": hypothesisId, "location": location, "message": message, "data": data or {}, "timestamp": datetime.now().timestamp() * 1000 } with open(r"d:\\\\dev_new_pc\\\\chartbastan\\\\.cursor\\\\debug.log", "a") as f: f.write(json.dumps(log_entry) + "\\n") # #endregion # SQLite database (PARTAGÉE entre Next.js et FastAPI) # Chemin absolu à la racine du projet pour que les deux utilisent la MÊME base PROJECT_ROOT = Path(__file__).parent.parent DB_FILENAME = "chartbastan.db" DATABASE_PATH = PROJECT_ROOT / DB_FILENAME # Configuration SQLAlchemy engine = create_engine(f"sqlite:///{DATABASE_PATH.as_posix()}", connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # Déclarative base pour définir les tables Base = declarative_base() # #region agent log write_debug_log("D", "database.py:19", "Database engine created", {"DATABASE_PATH": str(DATABASE_PATH)}) # #endregion # Créer un engine à part pour les models # Les models (User, Match, Prediction, etc.) hériteront de Base model_engine = create_engine(f"sqlite:///{DATABASE_PATH.as_posix()}", connect_args={"check_same_thread": False}) ModelBase = declarative_base() def get_db(): """ Obtenir une session de base de données. Yields: Session de base de données SQLAlchemy. """ # #region agent log write_debug_log("D", "database.py:39", "get_db called", {}) # #endregion db = SessionLocal() try: yield db finally: db.close() # #region agent log write_debug_log("D", "database.py:46", "Database session closed", {}) # #endregion if __name__ == "__main__": # #region agent log write_debug_log("D", "database.py:32", "Database module loaded", {"status": "ready"}) # #endregion print("🗄️ Configuration de la Base de Données Chartbastan") print("=" * 60) print(f"📁 Racine du projet : {PROJECT_ROOT}") print(f"📄 Fichier de base de données : {DATABASE_PATH}") print(f"🔗 URL SQLAlchemy : sqlite:///{DATABASE_PATH.as_posix()}") print("=" * 60)