from collections.abc import Mapping from typing import Any from fastapi.responses import JSONResponse def success_response(data: Any, *, status_code: int = 200) -> JSONResponse: return JSONResponse( status_code=status_code, content={"code": status_code, "msg": "success", "data": data}, ) def error_response( status_code: int, message: str, *, error_code: str | None = None, details: Any = None, ) -> JSONResponse: content: dict[str, Any] = { "code": status_code, "msg": message, "data": None, } if error_code: content["errorCode"] = error_code if details: content["details"] = details return JSONResponse(status_code=status_code, content=content) def exception_parts(detail: Any) -> tuple[str, str | None, Any]: if isinstance(detail, Mapping): message = detail.get("msg") or detail.get("message") or "请求失败" raw_code = detail.get("errorCode") or detail.get("code") error_code = raw_code if isinstance(raw_code, str) else None return str(message), error_code, detail.get("details") return str(detail or "请求失败"), None, None