finyx_data_ai/app/core/response.py
2026-01-11 07:48:19 +08:00

63 lines
1.5 KiB
Python

"""
统一响应格式
"""
from typing import Optional, Any, Dict, Generic, TypeVar
from pydantic import BaseModel, Field
T = TypeVar("T")
class APIResponse(BaseModel, Generic[T]):
"""统一 API 响应格式"""
success: bool = Field(default=True, description="请求是否成功")
code: int = Field(default=200, description="HTTP 状态码")
message: str = Field(default="操作成功", description="响应消息")
data: Optional[T] = Field(default=None, description="响应数据")
error: Optional[Dict[str, Any]] = Field(default=None, description="错误信息")
class Config:
json_schema_extra = {
"example": {
"success": True,
"code": 200,
"message": "操作成功",
"data": {},
}
}
def success_response(
data: Any = None,
message: str = "操作成功",
code: int = 200,
) -> APIResponse:
"""成功响应"""
return APIResponse(
success=True,
code=code,
message=message,
data=data,
)
def error_response(
message: str = "操作失败",
code: int = 500,
error_code: Optional[str] = None,
error_detail: Optional[Any] = None,
) -> APIResponse:
"""错误响应"""
error = {}
if error_code:
error["error_code"] = error_code
if error_detail:
error["error_detail"] = error_detail
return APIResponse(
success=False,
code=code,
message=message,
error=error if error else None,
)