from __future__ import annotations import uuid from typing import Any class AppError(Exception): def __init__( self, code: str, message: str, status_code: int = 400, details: dict[str, Any] | None = None, ) -> None: super().__init__(message) self.code = code self.message = message self.status_code = status_code self.details = details or {} self.correlation_id = str(uuid.uuid4()) def error_body(code: str, message: str, correlation_id: str, details: dict[str, Any]) -> dict: return { "error": { "code": code, "message": message, "correlation_id": correlation_id, "details": details, } }