from fastapi import FastAPI, Request from fastapi.responses import JSONResponse from pydantic import ValidationError from app.core.exceptions import AppError from app.schemas.common import ModuleName def register_error_handlers(app: FastAPI) -> None: @app.exception_handler(AppError) async def app_error_handler(_: Request, exc: AppError) -> JSONResponse: return JSONResponse( status_code=400, content={"code": exc.code, "desc": exc.desc, "module": exc.module.value}, ) @app.exception_handler(ValidationError) async def validation_error_handler(_: Request, exc: ValidationError) -> JSONResponse: return JSONResponse( status_code=422, content={ "code": "validation_error", "desc": str(exc), "module": ModuleName.BACKEND.value, }, ) @app.exception_handler(Exception) async def generic_error_handler(_: Request, exc: Exception) -> JSONResponse: return JSONResponse( status_code=500, content={ "code": "internal_error", "desc": str(exc), "module": ModuleName.BACKEND.value, }, )