92 lines
2.0 KiB
Python
92 lines
2.0 KiB
Python
"""
|
|
API响应工具模块
|
|
用于处理API响应数据的转换和统一响应格式
|
|
"""
|
|
from typing import Dict, Any, List, Optional
|
|
from datetime import datetime
|
|
|
|
class ApiResponseUtil:
|
|
"""API响应工具类"""
|
|
|
|
|
|
def success_response(data: Any = None, message: str = "操作成功", code: int = 200) -> Dict[str, Any]:
|
|
"""
|
|
创建成功响应
|
|
|
|
Args:
|
|
data: 响应数据
|
|
message: 响应消息
|
|
code: HTTP状态码
|
|
|
|
Returns:
|
|
统一格式的成功响应
|
|
"""
|
|
response = {
|
|
"success": True,
|
|
"code": code,
|
|
"message": message,
|
|
"timestamp": datetime.now().isoformat()
|
|
}
|
|
|
|
if data is not None:
|
|
response["data"] = data
|
|
|
|
return response
|
|
|
|
|
|
def error_response(message: str = "操作失败", error: str = None, code: int = 400) -> Dict[str, Any]:
|
|
"""
|
|
创建错误响应
|
|
|
|
Args:
|
|
message: 错误消息
|
|
error: 详细错误信息
|
|
code: HTTP状态码
|
|
|
|
Returns:
|
|
统一格式的错误响应
|
|
"""
|
|
response = {
|
|
"success": False,
|
|
"code": code,
|
|
"message": message,
|
|
"timestamp": datetime.now().isoformat()
|
|
}
|
|
|
|
if error:
|
|
response["error"] = error
|
|
|
|
return response
|
|
|
|
|
|
def paginated_response(data: List[Any], total: int, page: int = 1,
|
|
page_size: int = 10, message: str = "查询成功") -> Dict[str, Any]:
|
|
"""
|
|
创建分页响应
|
|
|
|
Args:
|
|
data: 分页数据
|
|
total: 总数据量
|
|
page: 当前页码
|
|
page_size: 每页大小
|
|
message: 响应消息
|
|
|
|
Returns:
|
|
统一格式的分页响应
|
|
"""
|
|
total_pages = (total + page_size - 1) // page_size
|
|
|
|
return success_response(
|
|
data={
|
|
"list": data,
|
|
"pagination": {
|
|
"total": total,
|
|
"page": page,
|
|
"page_size": page_size,
|
|
"total_pages": total_pages,
|
|
"has_next": page < total_pages,
|
|
"has_prev": page > 1
|
|
}
|
|
},
|
|
message=message
|
|
) |