"""Einstiegspunkt der moneyfy-Anwendung.""" import logging from collections.abc import AsyncGenerator from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.api.router import api_router from app.core.config import settings from app.core.errors import register_exception_handlers logging.basicConfig( level=logging.DEBUG if settings.debug else logging.INFO, format="%(asctime)s %(levelname)-8s %(name)s: %(message)s", ) logger = logging.getLogger("moneyfy") @asynccontextmanager async def lifespan(_: FastAPI) -> AsyncGenerator[None, None]: """Start- und Stopplogik der Anwendung.""" settings.logo_storage_dir.mkdir(parents=True, exist_ok=True) logger.info("moneyfy %s gestartet (%s)", settings.app_version, settings.environment) yield logger.info("moneyfy wird beendet") def create_app() -> FastAPI: app = FastAPI( title="moneyfy", version=settings.app_version, description="Planung monatlicher Kosten und Einkünfte.", openapi_url="/api/openapi.json", docs_url="/api/docs", redoc_url=None, lifespan=lifespan, ) if settings.cors_origin_list: app.add_middleware( CORSMiddleware, allow_origins=settings.cors_origin_list, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) register_exception_handlers(app) app.include_router(api_router) return app app = create_app()