| """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 |
|
|