46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""Domain error types.
|
|
|
|
Use these instead of bare exceptions so services/routers can map them to
|
|
meaningful HTTP responses. Never swallow errors silently (see ARCHITECTURE.md §10).
|
|
"""
|
|
|
|
|
|
class DomainError(Exception):
|
|
"""Base class for all application-domain errors."""
|
|
|
|
|
|
class NotFoundError(DomainError):
|
|
"""Raised when an entity cannot be found by its identifier."""
|
|
|
|
|
|
class ValidationError(DomainError):
|
|
"""Raised when input fails a business rule (not just schema validation)."""
|
|
|
|
|
|
class InsufficientDaysError(DomainError):
|
|
"""Raised when a parent doesn't have enough remaining days to plan."""
|
|
|
|
|
|
class InvalidDayTypeError(ValidationError):
|
|
"""Raised when a planned-day type is not recognized."""
|
|
|
|
|
|
class DubbeldagError(ValidationError):
|
|
"""Raised when a dubbeldag breaks the 15-month window or the 60-day quota."""
|
|
|
|
|
|
class AuthError(DomainError):
|
|
"""Raised when credentials are invalid or an auth operation fails."""
|
|
|
|
|
|
class UnauthorizedError(DomainError):
|
|
"""Raised when the caller lacks permission to perform an action."""
|
|
|
|
|
|
class ConflictError(DomainError):
|
|
"""Raised when a resource already exists (e.g. duplicate email on register)."""
|
|
|
|
|
|
class InvitationError(ValidationError):
|
|
"""Raised when an invitation token is invalid, expired, or already redeemed."""
|