from typing import Any class AppError(Exception): """Domain error rendered as a machine-readable JSON error payload.""" status_code: int = 400 code: str = "APP_ERROR" def __init__( self, message: str, *, code: str | None = None, status_code: int | None = None, details: Any = None, ) -> None: super().__init__(message) self.message = message if code is not None: self.code = code if status_code is not None: self.status_code = status_code self.details = details def bad_request(code: str, message: str, details: Any = None) -> AppError: return AppError(message, code=code, status_code=400, details=details) def unauthorized(code: str, message: str, details: Any = None) -> AppError: return AppError(message, code=code, status_code=401, details=details) def forbidden(code: str, message: str, details: Any = None) -> AppError: return AppError(message, code=code, status_code=403, details=details) def not_found(code: str, message: str, details: Any = None) -> AppError: return AppError(message, code=code, status_code=404, details=details) def conflict(code: str, message: str, details: Any = None) -> AppError: return AppError(message, code=code, status_code=409, details=details) def unprocessable(code: str, message: str, details: Any = None) -> AppError: return AppError(message, code=code, status_code=422, details=details)