# app/exceptions/order_item_exception.py """Order item exception specific exceptions.""" from .base import BusinessLogicException, ResourceNotFoundException class OrderItemExceptionNotFoundException(ResourceNotFoundException): """Raised when an order item exception is not found.""" def __init__(self, exception_id: int | str): super().__init__( resource_type="OrderItemException", identifier=str(exception_id), error_code="ORDER_ITEM_EXCEPTION_NOT_FOUND", ) class OrderHasUnresolvedExceptionsException(BusinessLogicException): """Raised when trying to confirm an order with unresolved exceptions.""" def __init__(self, order_id: int, unresolved_count: int): super().__init__( message=( f"Order has {unresolved_count} unresolved product exception(s). " f"Please resolve all exceptions before confirming the order." ), error_code="ORDER_HAS_UNRESOLVED_EXCEPTIONS", details={ "order_id": order_id, "unresolved_count": unresolved_count, }, ) class ExceptionAlreadyResolvedException(BusinessLogicException): """Raised when trying to resolve an already resolved exception.""" def __init__(self, exception_id: int): super().__init__( message=f"Exception {exception_id} has already been resolved", error_code="EXCEPTION_ALREADY_RESOLVED", details={"exception_id": exception_id}, ) class InvalidProductForExceptionException(BusinessLogicException): """Raised when the product provided for resolution is invalid.""" def __init__(self, product_id: int, reason: str): super().__init__( message=f"Cannot use product {product_id} for resolution: {reason}", error_code="INVALID_PRODUCT_FOR_EXCEPTION", details={"product_id": product_id, "reason": reason}, )