class AppException(Exception): def __init__(self, status_code: int = 500, code: str = "INTERNAL_ERROR", detail: str = "An error occurred"): self.status_code = status_code self.code = code self.detail = detail class NotFoundException(AppException): def __init__(self, detail: str = "Resource not found"): super().__init__(status_code=404, code="NOT_FOUND", detail=detail) class ForbiddenException(AppException): def __init__(self, detail: str = "Access denied"): super().__init__(status_code=403, code="FORBIDDEN", detail=detail) class ValidationException(AppException): def __init__(self, detail: str = "Validation error"): super().__init__(status_code=422, code="VALIDATION_ERROR", detail=detail) class RateLimitException(AppException): def __init__(self, detail: str = "Too many requests"): super().__init__(status_code=429, code="RATE_LIMIT_EXCEEDED", detail=detail)