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