from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from slowapi import Limiter, _rate_limit_exceeded_handler from slowapi.util import get_remote_address from slowapi.errors import RateLimitExceeded from backend.core.config import settings from backend.api.auth import router as auth_router from backend.api.clients import router as clients_router from backend.api.audits import router as audits_router limiter = Limiter(key_func=get_remote_address) app = FastAPI( title=settings.app_name, description="API d'audit infrastructure et sécurité pour MSP", version="1.0.0", docs_url="/api/docs" if settings.debug else None, redoc_url="/api/redoc" if settings.debug else None, ) app.state.limiter = limiter app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) app.add_middleware( CORSMiddleware, allow_origins=["http://localhost:3000"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(auth_router, prefix="/api") app.include_router(clients_router, prefix="/api") app.include_router(audits_router, prefix="/api") @app.get("/api/health") def health() -> dict: return {"status": "ok", "service": settings.app_name}