28 lines
750 B
Python
28 lines
750 B
Python
from functools import wraps
|
|
|
|
from fastapi import HTTPException
|
|
|
|
from sqlalchemy.exc import DatabaseError as SqlAlchemyDatabaseError
|
|
|
|
from app.core.errors import RepositoryError, ServiceError
|
|
|
|
|
|
def propagate_db_error_to_service(func):
|
|
@wraps(func)
|
|
def wrapper(*args, **kwargs):
|
|
try:
|
|
return func(*args, **kwargs)
|
|
except (SqlAlchemyDatabaseError, RepositoryError) as e:
|
|
raise ServiceError(str(e)) from e
|
|
return wrapper
|
|
|
|
|
|
def propagate_service_errors_to_http_errors(func):
|
|
@wraps(func)
|
|
def wrapper(*args, **kwargs):
|
|
try:
|
|
return func(*args, **kwargs)
|
|
except ServiceError as e:
|
|
raise HTTPException(status_code=500, detail=str(e)) from e
|
|
return wrapper
|