# app/exceptions/message.py """ Messaging specific exceptions. """ from .base import BusinessLogicException, ResourceNotFoundException, ValidationException class ConversationNotFoundException(ResourceNotFoundException): """Raised when a conversation is not found.""" def __init__(self, conversation_identifier: str): super().__init__( resource_type="Conversation", identifier=conversation_identifier, message=f"Conversation '{conversation_identifier}' not found", error_code="CONVERSATION_NOT_FOUND", ) class MessageNotFoundException(ResourceNotFoundException): """Raised when a message is not found.""" def __init__(self, message_identifier: str): super().__init__( resource_type="Message", identifier=message_identifier, message=f"Message '{message_identifier}' not found", error_code="MESSAGE_NOT_FOUND", ) class ConversationClosedException(BusinessLogicException): """Raised when trying to send message to a closed conversation.""" def __init__(self, conversation_id: int): super().__init__( message=f"Cannot send message to closed conversation {conversation_id}", error_code="CONVERSATION_CLOSED", details={"conversation_id": conversation_id}, ) class MessageAttachmentException(ValidationException): """Raised when attachment validation fails.""" def __init__(self, message: str, details: dict | None = None): super().__init__( message=message, error_code="MESSAGE_ATTACHMENT_INVALID", details=details, ) class UnauthorizedConversationAccessException(BusinessLogicException): """Raised when user tries to access a conversation they don't have access to.""" def __init__(self, conversation_id: int): super().__init__( message=f"You do not have access to conversation {conversation_id}", error_code="CONVERSATION_ACCESS_DENIED", details={"conversation_id": conversation_id}, )