""" Database Configuration and Session Management """ from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, Session from typing import Generator import os # Database URL from environment or default to local SQLite (for integration testing) # PostgreSQL for production: postgresql://rtsport:rtsport@localhost:5432/rtsport # Use absolute path for SQLite to avoid CWD-dependent behavior _SQLITE_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "rtsport.db") DATABASE_URL = os.getenv( "DATABASE_URL", f"sqlite:///{_SQLITE_PATH}" # Default to SQLite for local testing ) # Create engine with SQLite-specific config if needed engine_args = {"pool_pre_ping": True, "pool_size": 10, "max_overflow": 20} if DATABASE_URL.startswith("sqlite"): engine_args = {"connect_args": {"check_same_thread": False}} engine = create_engine(DATABASE_URL, **engine_args) # Session factory SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # Base class for models (imported from models.py, but kept here for reference) # from app.models import Base def get_db() -> Generator[Session, None, None]: """FastAPI dependency for database sessions""" db = SessionLocal() try: yield db finally: db.close() def init_db(): """Initialize database tables""" from app.models import Base Base.metadata.create_all(bind=engine) def drop_db(): """Drop all tables - use with caution""" from app.models import Base Base.metadata.drop_all(bind=engine)