from fastapi import FastAPI from fastapi.responses import JSONResponse from api.v1 import users, roles, need_requests, reports, uploads, person_reports, technical_issues, points_of_interest, shelters, auth #, messages from config.database import init_db from starlette.middleware.base import BaseHTTPMiddleware from utils.logging import logger app = FastAPI(title="Disaster Management API", description="API for managing disaster during these days of ending world.") # Middleware pour logger les erreurs class LogErrorsMiddleware(BaseHTTPMiddleware): async def dispatch(self, request, call_next): try: response = await call_next(request) return response except Exception as e: logger.error(f"Auth error: {str(e)}") return JSONResponse( status_code=500, content={"message": "Internal Server Error"} ) # Ajouter le middleware à l'application app.add_middleware(LogErrorsMiddleware) # Include routers app.include_router(auth.router, prefix="/api/v1/auth", tags=["auth"]) app.include_router(person_reports.router, prefix="/api/v1/person_reports", tags=["person_reports"]) app.include_router(users.router, prefix="/api/v1/users", tags=["users"]) app.include_router(roles.router, prefix="/api/v1/roles", tags=["roles"]) app.include_router(need_requests.router, prefix="/api/v1/needs", tags=["needs"]) app.include_router(reports.router, prefix="/api/v1/reports", tags=["reports"]) #app.include_router(messages.router, prefix="/api/v1/messages", tags=["messages"]) app.include_router(uploads.router, prefix="/api/v1/uploads", tags=["uploads"]) app.include_router(technical_issues.router, prefix="/api/v1/technical_issues", tags=["technical_issues"]) app.include_router(points_of_interest.router, prefix="/api/v1/points_of_interest", tags=["points_of_interest"]) app.include_router(shelters.router, prefix="/api/v1/shelters", tags=["shelters"]) # Initialize database @app.on_event("startup") async def startup(): await init_db()