Exceptions are categorized into 9 main families, each backed by an abstract base class.
- Category:
SYSTEM - Default Status: 500
- Usage: For critical failures like database errors, filesystem failures, or external API outages.
- Concrete:
DatabaseConnectionMaatifyException
- Category:
RATE_LIMIT - Default Status: 429
- Default
isRetryable():true - Usage: When a client exceeds the allowed request rate.
- Concrete:
TooManyRequestsMaatifyException
- Category:
AUTHENTICATION - Default Status: 401
- Usage: When a user is not logged in or has an invalid session.
- Concrete:
UnauthorizedMaatifyException,SessionExpiredMaatifyException
- Category:
AUTHORIZATION - Default Status: 403
- Usage: When a user is logged in but lacks permission.
- Concrete:
ForbiddenMaatifyException
- Category:
VALIDATION - Default Status: 400
- Usage: For invalid client input (e.g., malformed email, missing field).
- Concrete:
InvalidArgumentMaatifyException
- Category:
BUSINESS_RULE - Default Status: 422
- Usage: For domain-specific logic (e.g., "Cannot cancel shipped order").
- Concrete:
BusinessRuleMaatifyException(Abstract)
- Category:
CONFLICT - Default Status: 409
- Usage: For duplicate resource creation or data inconsistency.
- Concrete:
GenericConflictMaatifyException
- Category:
NOT_FOUND - Default Status: 404
- Usage: When a requested resource does not exist.
- Concrete:
ResourceNotFoundMaatifyException
- Category:
UNSUPPORTED - Default Status: 409
- Usage: When an operation is valid but not supported in the current context.
- Concrete:
UnsupportedOperationMaatifyException