from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.api.v1 import router as api_v1_router from app.db.bootstrap import bootstrap_dev_data, create_all_tables from app.db.session import SessionLocal from app.settings import settings @asynccontextmanager async def lifespan(app: FastAPI): if settings.app_env == "dev" and settings.dev_bootstrap_enabled: create_all_tables() with SessionLocal() as session: bootstrap_dev_data(session, api_key_secret=settings.dev_bootstrap_api_key) yield app = FastAPI(title="MultiMailer Server", version="0.2.0", lifespan=lifespan) origins = [item.strip() for item in settings.cors_origins.split(",") if item.strip()] if origins: app.add_middleware( CORSMiddleware, allow_origins=["*"] if "*" in origins else origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(api_v1_router) @app.get("/health") def health(): return { "status": "ok", "env": settings.app_env, "api": {"version": "v1", "auth": "api-key"}, "storage": { "endpoint": settings.s3_endpoint_url, "bucket": settings.s3_bucket, "region": settings.s3_region, }, }