VWED_server/utils/api_response.py

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
)