feat: wire database init and seeding into app startup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-24 10:14:32 -06:00
parent 6f9e923846
commit 7c07bcee25

View File

@@ -10,11 +10,14 @@ import structlog
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from sqlmodel import SQLModel, Session
from app.config import get_settings
from app.database import get_engine, get_db_session
from app.logging_config import setup_logging
from app.routes.health import router as health_router
from app.routes.pages import router as pages_router
from app.services.seed_service import SeedService
logger = structlog.get_logger(__name__)
@@ -50,6 +53,24 @@ def create_app() -> FastAPI:
app.include_router(health_router)
app.include_router(pages_router)
# Database setup
engine = get_engine(settings.database_url)
SQLModel.metadata.create_all(engine)
app.state.engine = engine
# DB session dependency for routes
def _get_session():
yield from get_db_session(engine)
app.dependency_overrides[get_db_session] = _get_session
# Seed database on startup
@app.on_event("startup")
async def on_startup():
with Session(engine) as session:
seed_service = SeedService(session)
seed_service.seed_all()
logger.info("app_started", environment=settings.app_env)
return app