84 lines
2.8 KiB
Python
84 lines
2.8 KiB
Python
"""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)
|