feat: wire database init and seeding into app startup
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
21
app/main.py
21
app/main.py
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user