"""FastAPI application factory.""" from __future__ import annotations from collections.abc import AsyncIterator from contextlib import asynccontextmanager from fastapi import FastAPI from app.api.routes import api_router from app.core.cache import init_cache, shutdown_cache from app.core.config import settings from app.core.middleware.cache_monitor import CacheAvailabilityMiddleware def create_app() -> FastAPI: """Build FastAPI application instance.""" @asynccontextmanager async def lifespan(_: FastAPI) -> AsyncIterator[None]: await init_cache() try: yield finally: await shutdown_cache() application = FastAPI(title=settings.project_name, version=settings.version, lifespan=lifespan) application.include_router(api_router) application.add_middleware(CacheAvailabilityMiddleware) return application app = create_app()