Mini12306/utils/response.py

57 lines
1.6 KiB
Python

from enum import Enum
from typing import Any, Dict, List, Union
class StateCode(Enum):
SUCCESS = 0
NOT_AUTHORIZED = 1002
PARAMS_ERROR = 1003
USER_NOT_FOUND = 2001
USER_ALREADY_EXISTS = 2002
PASSWORD_INCORRECT = 2003
MOBILE_CODE_ERROR = 2004
ID_CARD_ERROR = 2005
BANK_CARD_ERROR = 2006
MOBILE_ERROR = 2007
STATE_MESSAGES = {
StateCode.SUCCESS: "OK",
StateCode.PARAMS_ERROR: "缺少参数",
StateCode.NOT_AUTHORIZED: "未登录",
StateCode.USER_NOT_FOUND: "用户不存在",
StateCode.USER_ALREADY_EXISTS: "用户已存在",
StateCode.PASSWORD_INCORRECT: "密码错误",
StateCode.MOBILE_CODE_ERROR: "验证码错误",
StateCode.ID_CARD_ERROR: "身份证号验证失败",
StateCode.MOBILE_ERROR: "手机号格式有误",
StateCode.BANK_CARD_ERROR: "银行卡验证错误"
}
def create_response(
code: StateCode,
message: str = None,
single_data: Dict[str, Any] = None,
multiple_data: Dict[str, List[Dict[str, Any]]] = None
) -> Dict[str, Any]:
"""
创建统一的返回格式。
:param code: ErrorCode 错误码
:param message: 错误信息,可选。如果不传递则使用默认的错误信息
:param single_data: 包含单个 Presenter 转换后的数据字典
:param multiple_data: 包含多个 Presenter 转换后的数据字典,键为描述,值为对象列表
:return: 返回统一格式的字典
"""
return {
"code": code.value,
"msg": message or STATE_MESSAGES.get(code, "Unknown error"),
"data": {
**(single_data or {}),
**(multiple_data or {})
}
}