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 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
|
||||||
|
|||||||
Reference in New Issue
Block a user