service_man/api/app_entrypoint/error_handlers.py

49 lines
1.9 KiB
Python

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from api.domain.error import DomainValidationError
from api.domain.user.error import (
UserAlreadyExistsError,
UserInvalidCredentialsError,
UserIsNotAuthorizedError,
)
from api.infrastructure.persistence.error import TransactionContextManagerError
async def transaction_error_exec_handler(request: Request, exc: TransactionContextManagerError) -> JSONResponse:
return JSONResponse(status_code=400, content={"detail": exc.message})
async def validation_error_exc_handler(request: Request, exc: DomainValidationError) -> JSONResponse:
return JSONResponse(status_code=400, content={"detail": exc.message})
async def user_authentication_error_exc_handler(request: Request, exc: UserIsNotAuthorizedError) -> JSONResponse:
return JSONResponse(
status_code=401,
content={"detail": exc.message},
headers={"WWW-Authenticate": "Bearer"},
)
async def user_already_exist_error_exc_handler(request: Request, exc: UserAlreadyExistsError) -> JSONResponse:
return JSONResponse(status_code=409, content={"detail": exc.message})
async def user_invalid_credentials_error_exc_handler(
request: Request, exc: UserInvalidCredentialsError
) -> JSONResponse:
return JSONResponse(status_code=401, content={"detail": exc.message})
def init_exc_handlers(app: FastAPI) -> None:
app.add_exception_handler(
DomainValidationError,
validation_error_exc_handler,
)
app.add_exception_handler(UserIsNotAuthorizedError, user_authentication_error_exc_handler)
app.add_exception_handler(UserAlreadyExistsError, user_already_exist_error_exc_handler)
app.add_exception_handler(UserInvalidCredentialsError, user_invalid_credentials_error_exc_handler)
app.add_exception_handler(TransactionContextManagerError, transaction_error_exec_handler)