38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
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,
|
|
},
|
|
)
|