- 将全部路由文件(12个)的 jsonify 响应迁移至 success_response/error_response 统一格式 - 修复 sync_routes.py error_response 参数错误(P0) - 新增异步任务系统:task_registry + task_routes - 新增状态码:TASK_NOT_FOUND(4014)、TASK_CONFLICT(4015)、REINDEX_ERROR(5040) - 修正 task_routes/exam_pkg 中语义不匹配的状态码 - 更新 curl 测试手册、后端对接规范文档 - 添加缓存性能报告和 Redis 迁移计划
132 lines
2.9 KiB
Python
132 lines
2.9 KiB
Python
"""
|
||
状态码定义
|
||
|
||
统一的业务状态码,用于 API 响应中标识操作结果。
|
||
状态码格式:4位数字,前两位表示类别,后两位表示具体状态
|
||
- 10xx: 处理中
|
||
- 20xx: 成功
|
||
- 40xx: 客户端错误
|
||
- 50xx: 服务端错误
|
||
"""
|
||
|
||
from typing import Dict
|
||
|
||
# 状态码到消息的映射
|
||
_STATUS_MESSAGES: Dict[int, str] = {
|
||
# 处理中状态 (10xx)
|
||
1000: "处理中",
|
||
1001: "文件接收中",
|
||
1002: "文件解析中",
|
||
1003: "向量化中",
|
||
1010: "同步进行中",
|
||
1020: "出题生成中",
|
||
1021: "批阅进行中",
|
||
|
||
# 成功状态 (20xx)
|
||
2000: "操作成功",
|
||
2001: "创建成功",
|
||
2002: "文件上传成功",
|
||
2003: "批量上传完成",
|
||
2004: "删除成功",
|
||
2005: "更新成功",
|
||
2010: "同步完成",
|
||
2020: "出题成功",
|
||
2021: "批阅完成",
|
||
2030: "图片描述更新成功",
|
||
|
||
# 客户端错误 (40xx)
|
||
4000: "请求参数错误",
|
||
4001: "未授权",
|
||
4002: "禁止访问",
|
||
4003: "资源不存在",
|
||
4004: "没有上传文件",
|
||
4005: "没有选择文件",
|
||
4006: "请指定目标向量库",
|
||
4007: "不支持的文件格式",
|
||
4008: "文件大小超过限制",
|
||
4009: "文档解析失败",
|
||
4010: "文件不存在",
|
||
4011: "向量库不存在",
|
||
4012: "文件内容为空",
|
||
4013: "权限不足",
|
||
4014: "任务不存在",
|
||
4015: "任务冲突",
|
||
|
||
# 服务端错误 (50xx)
|
||
5000: "服务器内部错误",
|
||
5001: "服务不可用",
|
||
5002: "向量化失败",
|
||
5003: "LLM调用失败",
|
||
5010: "同步失败",
|
||
5020: "出题失败",
|
||
5021: "批阅失败",
|
||
5030: "图片描述更新失败",
|
||
5040: "重建索引失败",
|
||
}
|
||
|
||
|
||
def get_status_message(status_code: int) -> str:
|
||
"""
|
||
根据状态码获取默认消息
|
||
|
||
Args:
|
||
status_code: 业务状态码
|
||
|
||
Returns:
|
||
状态码对应的默认消息
|
||
"""
|
||
return _STATUS_MESSAGES.get(status_code, "未知状态")
|
||
|
||
|
||
# ==================== 常用状态码常量 ====================
|
||
|
||
# 处理中 (10xx)
|
||
PROCESSING = 1000
|
||
FILE_RECEIVING = 1001
|
||
FILE_PARSING = 1002
|
||
VECTORIZING = 1003
|
||
SYNC_RUNNING = 1010
|
||
EXAM_GENERATING = 1020
|
||
EXAM_GRADING = 1021
|
||
|
||
# 成功 (20xx)
|
||
SUCCESS = 2000
|
||
CREATED = 2001
|
||
UPLOAD_SUCCESS = 2002
|
||
BATCH_UPLOAD_SUCCESS = 2003
|
||
DELETE_SUCCESS = 2004
|
||
UPDATE_SUCCESS = 2005
|
||
SYNC_SUCCESS = 2010
|
||
EXAM_SUCCESS = 2020
|
||
GRADE_SUCCESS = 2021
|
||
IMAGE_DESC_SUCCESS = 2030
|
||
|
||
# 客户端错误 (40xx)
|
||
BAD_REQUEST = 4000
|
||
UNAUTHORIZED = 4001
|
||
FORBIDDEN = 4002
|
||
NOT_FOUND = 4003
|
||
NO_FILE = 4004
|
||
NO_FILE_SELECTED = 4005
|
||
NO_COLLECTION = 4006
|
||
UNSUPPORTED_FORMAT = 4007
|
||
FILE_TOO_LARGE = 4008
|
||
PARSE_ERROR = 4009
|
||
FILE_NOT_FOUND = 4010
|
||
COLLECTION_NOT_FOUND = 4011
|
||
NO_CONTENT = 4012
|
||
PERMISSION_DENIED = 4013
|
||
TASK_NOT_FOUND = 4014
|
||
TASK_CONFLICT = 4015
|
||
|
||
# 服务端错误 (50xx)
|
||
INTERNAL_ERROR = 5000
|
||
SERVICE_UNAVAILABLE = 5001
|
||
VECTORIZE_ERROR = 5002
|
||
LLM_ERROR = 5003
|
||
SYNC_ERROR = 5010
|
||
EXAM_ERROR = 5020
|
||
GRADE_ERROR = 5021
|
||
IMAGE_DESC_ERROR = 5030
|
||
REINDEX_ERROR = 5040
|