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 import FastAPI
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
from sqlmodel import SQLModel, Session
from app.config import get_settings from app.config import get_settings
from app.database import get_engine, get_db_session
from app.logging_config import setup_logging from app.logging_config import setup_logging
from app.routes.health import router as health_router from app.routes.health import router as health_router
from app.routes.pages import router as pages_router from app.routes.pages import router as pages_router
from app.services.seed_service import SeedService
logger = structlog.get_logger(__name__) logger = structlog.get_logger(__name__)
@@ -50,6 +53,24 @@ def create_app() -> FastAPI:
app.include_router(health_router) app.include_router(health_router)
app.include_router(pages_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) logger.info("app_started", environment=settings.app_env)
return app return app