| """ | |
| UsTwo SQLite database setup. | |
| Uses SQLAlchemy with SQLite β no external DB server needed. | |
| DB file: data/ustwo.db (created automatically on first run). | |
| """ | |
| import os | |
| from sqlalchemy import create_engine | |
| from sqlalchemy.orm import sessionmaker, DeclarativeBase | |
| DATA_DIR = os.path.join(os.path.dirname(__file__), "..", "..", "data") | |
| DATABASE_URL = f"sqlite:///{os.path.join(DATA_DIR, 'ustwo.db')}" | |
| class Base(DeclarativeBase): | |
| pass | |
| engine = create_engine(DATABASE_URL, echo=False) | |
| SessionLocal = sessionmaker(bind=engine) | |
| def init_db(): | |
| """Create all tables. Safe to call multiple times.""" | |
| os.makedirs(DATA_DIR, exist_ok=True) | |
| from . import models # noqa: F401 β ensure models are registered | |
| Base.metadata.create_all(bind=engine) | |
| def get_db(): | |
| """FastAPI dependency β yields a DB session, closes after request.""" | |
| db = SessionLocal() | |
| try: | |
| yield db | |
| finally: | |
| db.close() | |