from contextlib import asynccontextmanager from collections.abc import AsyncIterator from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.config import settings from app.database import engine @asynccontextmanager async def lifespan(_app: FastAPI) -> AsyncIterator[None]: yield await engine.dispose() def create_app() -> FastAPI: app = FastAPI( title="Budget Tracker API", version="0.1.0", lifespan=lifespan, ) app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.get("/health") async def health_check() -> dict[str, str]: return {"status": "ok"} return app app = create_app()