"""Fábrica de la aplicación FastAPI.""" from __future__ import annotations from fastapi import FastAPI from app.core.config import settings from app.core.exception_handlers import register_exception_handlers from app.core.lifespan import lifespan from app.core.middleware import setup_middlewares from app.rutas import api_router def create_app() -> FastAPI: """Crea y configura la instancia de FastAPI.""" app = FastAPI( title=settings.APP_NAME, version=settings.APP_VERSION, description=settings.APP_DESCRIPTION, debug=settings.DEBUG, lifespan=lifespan, ) setup_middlewares(app) register_exception_handlers(app) app.include_router(api_router, prefix=settings.API_PREFIX) @app.get("/health", tags=["Salud"], summary="Estado del servicio") async def health() -> dict[str, str]: """Liveness: responde siempre y rápido (no depende de la base de datos).""" return {"status": "ok"} @app.get( "/health/db", tags=["Salud"], summary="Estado de la conexión a MongoDB", ) async def health_db() -> dict[str, str]: """Readiness: comprueba si MongoDB responde en este momento.""" from app.database.mongodb import mongodb conectado = await mongodb.ping() return {"database": "connected" if conectado else "disconnected"} return app