MVP v1 接口总览
后端路由复核日期:2026-07-26
前端调用状态盘点日期:2026-07-17
范围:Tender/tender-service 当前后端代码,以及 Tender/tender-app 前端静态调用。
目的:说明系统大概有哪些接口、属于哪个模块、当前是否接入;不记录请求参数、响应字段和错误码等接口细节。
1. 状态说明
| 状态 |
含义 |
| 在用 |
当前前端页面、组件或 SSE 流程中能找到明确调用 |
| 部分在用 |
同一组接口中只有一部分被当前前端调用 |
| 后端保留 |
已注册到后端,但当前前端未发现调用;可能供调试、未来功能或其他调用方使用 |
| 系统/外部 |
健康检查、支付平台回调等,不由普通前端页面调用 |
| 内部管理 |
管理后台或内部测试接口 |
| 未注册 |
代码仍存在或已注释,但没有注册到当前 FastAPI 应用 |
| 前端残留 |
前端存在调用,但当前后端没有对应路由,需要后续确认或清理 |
这里的“在用”来自代码静态扫描,不等同于线上流量统计。动态拼接、第三方调用或尚未合并的其他客户端可能无法被扫描到。
2. 总体概况
- 当前 FastAPI 应用实际注册业务路由:168 个(不含 Swagger、ReDoc 和 OpenAPI 文档路由)。
- 主要模块:任务、图库、通用文件、用户、知识库、标书、订阅支付、产品库、系统回调、管理后台。
- 路由分布:管理后台 39、标书 60、知识库 15、图库 14、产品库 14、用户 8、任务 5、订阅支付 5、Webhook 4、文件 2、健康检查 2。
- 标书相关路由最多:60 个,覆盖上传解析、目录、编写思路、正文生成、文档导出等完整流程。
/v1 是普通业务接口前缀;/admin 是管理接口前缀;/health 和 /webhook 属于系统接口。
- 2026-07-26 已将本文第 3~12 节的方法与路径展开,并与
app.openapi()["paths"] 逐项比较:缺失 0 个,过期 0 个,未分类 0 个。
3. 异步任务
| 方法与路径 |
大概用途 |
状态 |
GET /v1/tasks |
查询解析/后台任务列表 |
后端保留 |
GET /v1/tasks/logs |
查询任务执行日志 |
后端保留 |
GET /v1/tasks/{task_id} |
查询单个任务状态 |
后端保留 |
GET /v1/tasks/{task_id}/events |
订阅任务进度 SSE |
在用 |
DELETE /v1/tasks/{task_id} |
取消后台任务 |
在用 |
4. 图库与图片
| 方法与路径 |
大概用途 |
状态 |
GET/POST /v1/image-galleries |
查询、创建图库 |
在用 |
PATCH/DELETE /v1/image-galleries/{gallery_id} |
修改、删除图库 |
在用 |
POST /v1/image-galleries/{gallery_id}/files/presigned-url |
获取图片直传签名 |
在用 |
POST /v1/image-galleries/{gallery_id}/files/confirm-upload |
确认图片上传 |
在用 |
GET /v1/image-galleries/{gallery_id}/files |
查询图库图片 |
在用 |
GET /v1/image-galleries/{gallery_id}/files/analysis-batches |
订阅批量图片理解进度 |
在用 |
GET/PATCH/DELETE /v1/image-galleries/{gallery_id}/files/{file_id} |
查看、修改、删除图片 |
在用 |
POST /v1/image-galleries/{gallery_id}/files/{file_id}/analyze |
重新进行 AI 图片理解 |
后端保留 |
POST /v1/image-galleries/{gallery_id}/files/extract |
从文档预览抽取图片 |
在用 |
POST /v1/image-galleries/{gallery_id}/files/extract/confirm-insert |
将抽取结果写入图库 |
在用 |
5. 通用文件上传
| 方法与路径 |
大概用途 |
状态 |
POST /v1/files/presigned-url |
获取通用文件直传签名 |
在用 |
POST /v1/files/confirm-upload |
确认通用文件上传 |
在用 |
6. 用户、认证与额度
| 方法与路径 |
大概用途 |
状态 |
POST /v1/users/send-code |
发送短信验证码 |
在用 |
POST /v1/users/login |
验证码登录/自动注册 |
在用 |
POST /v1/users/password-login |
手机号密码登录 |
后端保留 |
GET /v1/users/me |
查询当前登录用户 |
后端保留 |
GET/PATCH /v1/users/profile |
查询、修改个人资料 |
在用 |
GET /v1/users/quota |
查询字数余额和套餐额度 |
在用 |
POST /v1/users/{user_id}/role |
设置用户角色 |
后端保留 |
7. 知识库
7.1 知识库与文件
| 方法与路径 |
大概用途 |
状态 |
GET/POST /v1/knowledges |
查询、创建知识库 |
在用 |
GET /v1/knowledges/tree |
查询知识库与文件树 |
在用 |
PATCH/DELETE /v1/knowledges/{kb_id} |
修改、删除知识库 |
在用 |
GET /v1/knowledges/{kb_id}/files |
查询知识库文件 |
在用 |
POST /v1/knowledges/{kb_id}/files/presigned-url |
获取知识库文件直传签名 |
在用 |
POST /v1/knowledges/{kb_id}/files/confirm-upload |
确认知识库文件上传并解析 |
在用 |
PATCH /v1/knowledges/{kb_id}/files/{file_id} |
修改文件名称或备注 |
在用 |
DELETE /v1/knowledges/{kb_id}/file/{file_id} |
删除知识库文件 |
在用 |
GET /v1/knowledges/{kb_id}/files/{file_id}/parse-job/events |
订阅文件解析进度 |
在用 |
POST /v1/knowledges/{kb_id}/files/{file_id}/reparse |
重新解析文件 |
在用 |
POST /v1/knowledges/{kb_id}/files/{file_id}/reindex |
重建文件向量索引 |
在用 |
7.2 检索与知识库助手
| 方法与路径 |
大概用途 |
状态 |
GET /v1/knowledges/{kb_id}/assistant/bootstrap |
初始化知识库助手 |
在用 |
POST /v1/knowledges/{kb_id}/assistant/chat/stream |
流式知识库问答 |
在用 |
8. 标书
8.1 文档格式配置
| 方法与路径 |
大概用途 |
状态 |
GET/POST /v1/tenders/document-styles |
查询、创建文档格式 |
在用 |
GET/PATCH /v1/tenders/document-styles/{style_id} |
查看、修改文档格式 |
后端保留 |
DELETE /v1/tenders/document-styles/{style_id} |
删除文档格式 |
在用 |
8.2 标书基础信息与流程状态
| 方法与路径 |
大概用途 |
状态 |
GET/POST /v1/tenders |
查询、创建标书 |
在用 |
GET/PATCH/DELETE /v1/tenders/{tender_id} |
查看、修改、删除标书 |
在用 |
POST /v1/tenders/{tender_id}/workflow/enter-outline |
进入目录编制阶段 |
在用 |
POST /v1/tenders/{tender_id}/workflow/enter-content |
进入正文编制阶段 |
在用 |
8.3 标书 AI 对话
| 方法与路径 |
大概用途 |
状态 |
POST /v1/tenders/{tender_id}/ai/chat/stream |
流式标书问答 |
在用 |
DELETE /v1/tenders/{tender_id}/ai/chat/session |
清空标书问答会话 |
在用 |
8.4 招标文件解析结果与文档导出
| 方法与路径 |
大概用途 |
状态 |
GET/DELETE /v1/tenders/{tender_id}/document/content |
查询、清空招标文件解析结果 |
在用 |
PATCH /v1/tenders/{tender_id}/document/parsed-content |
人工修正解析结果 |
在用 |
POST /v1/tenders/{tender_id}/document/download/docx |
下载 Word 标书 |
在用 |
8.5 目录骨架、导入与查看
| 方法与路径 |
大概用途 |
状态 |
POST /v1/tenders/{tender_id}/outline/skeleton |
生成一二级目录骨架 |
在用 |
GET /v1/tenders/{tender_id}/outline |
查询完整目录 |
在用 |
GET /v1/tenders/{tender_id}/outline/status |
查询目录编制状态 |
在用 |
GET /v1/tenders/{tender_id}/outline/download |
下载目录 Word 文档 |
在用 |
8.6 目录节点、顺序与字数
| 方法与路径 |
大概用途 |
状态 |
POST /v1/tenders/{tender_id}/outline/chapters/preview |
AI 预览待插入章节 |
在用 |
POST /v1/tenders/{tender_id}/outline/chapters/apply |
应用待插入章节 |
在用 |
POST /v1/tenders/{tender_id}/outline/node |
创建目录节点 |
在用 |
POST /v1/tenders/{tender_id}/outline/node/generate |
创建节点并生成子目录 SSE |
后端保留 |
POST /v1/tenders/{tender_id}/outline/node/{chapter_identifier}/children/preview |
根据编写思路预览节点子目录 |
在用 |
PATCH /v1/tenders/{tender_id}/outline/node |
修改节点页数/字数预估 |
在用 |
PUT /v1/tenders/{tender_id}/outline/node/content |
修改节点标题、子目录或编写思路 |
在用 |
DELETE /v1/tenders/{tender_id}/outline/{identifier} |
删除目录节点及子树 |
在用 |
PATCH /v1/tenders/{tender_id}/outline/estimates/bulk |
批量保存字数/页数预估 |
后端保留 |
PATCH /v1/tenders/{tender_id}/outline/children/catalog/order |
调整目录页二级节全局顺序 |
在用 |
PATCH /v1/tenders/{tender_id}/outline/chapters/order |
调整顶层章节顺序 |
在用 |
8.7 一键全文生成任务
| 方法与路径 |
大概用途 |
状态 |
POST /v1/tenders/{tender_id}/generation-runs/full |
创建一键全文生成任务 |
在用 |
GET /v1/tenders/{tender_id}/generation-runs/active |
查询当前生成任务 |
在用 |
GET /v1/tenders/{tender_id}/generation-runs/{run_id}/events |
订阅全文生成进度 |
在用 |
POST /v1/tenders/{tender_id}/generation-runs/{run_id}/cancel |
取消全文生成 |
在用 |
8.8 章节正文
| 方法与路径 |
大概用途 |
状态 |
GET /v1/tenders/{tender_id}/sections/stats |
查询正文编写统计 |
在用 |
GET /v1/tenders/{tender_id}/sections/completion |
查询已完成章节 |
在用 |
GET /v1/tenders/{tender_id}/sections/{section_id} |
查询单章正文 |
在用 |
PATCH /v1/tenders/{tender_id}/sections/{section_id}/content |
更新章节正文 |
在用 |
POST /v1/tenders/{tender_id}/sections/{section_id}/generate |
SSE 生成单章正文 |
后端保留 |
8.9 三四级目录与编写思路
| 方法与路径 |
大概用途 |
状态 |
GET /v1/tenders/{tender_id}/outline/children |
查询已入库目录树 |
在用 |
POST /v1/tenders/{tender_id}/outline/children/stream |
SSE 生成并写入子目录 |
在用 |
GET /v1/tenders/{tender_id}/outline/writing-hint |
查询已保存编写思路 |
在用 |
POST /v1/tenders/{tender_id}/outline/writing-hint/by-title/preview |
按标题预览生成编写思路 |
在用 |
POST /v1/tenders/{tender_id}/outline/writing-hint |
同步生成并保存编写思路 |
后端保留 |
8.10 Prompt 解析
| 方法与路径 |
大概用途 |
状态 |
GET /v1/tenders/{tender_id}/prompts/preview |
预览标书场景 Prompt |
在用 |
GET /v1/tenders/{tender_id}/prompts/{scene_key} |
解析指定 Prompt 场景 |
后端保留 |
8.11 招标文件上传与解析任务
| 方法与路径 |
大概用途 |
状态 |
POST /v1/tenders/document/presigned-url |
新建流程获取招标文件上传签名 |
在用 |
POST /v1/tenders/document/confirm-parse |
确认上传并创建/复用标书后解析 |
在用 |
POST /v1/tenders/{tender_id}/document/confirm-parse |
已有标书确认上传并解析 |
在用 |
GET /v1/tenders/{tender_id}/document/parse-events |
订阅招标文件解析进度 |
在用 |
8.12 清单附件
| 方法与路径 |
大概用途 |
状态 |
GET /v1/tenders/{tender_id}/checklist-files |
查询清单附件 |
后端保留 |
POST /v1/tenders/{tender_id}/checklist-files/presigned-url |
获取清单附件上传签名 |
在用 |
POST /v1/tenders/{tender_id}/checklist-files/confirm-upload |
确认清单附件上传 |
在用 |
DELETE /v1/tenders/{tender_id}/checklist-files/{file_id} |
删除清单附件 |
后端保留 |
GET /v1/tenders/{tender_id}/checklist-files/{file_id}/parse-job |
查询清单解析任务 |
后端保留 |
GET /v1/tenders/{tender_id}/checklist-files/{file_id}/parse-job/events |
订阅清单解析进度 |
后端保留 |
POST /v1/tenders/{tender_id}/checklist-files/{file_id}/reparse |
重新解析清单附件 |
后端保留 |
9. 订阅、订单与支付
| 方法与路径 |
大概用途 |
状态 |
GET /v1/subscription/plans |
查询可购买套餐 |
在用 |
POST /v1/payment/create-order |
创建支付订单 |
在用 |
GET /v1/payment/order/{order_sn} |
查询订单状态和详情 |
在用 |
GET /v1/payment/records |
查询当前用户支付记录 |
在用 |
GET /v1/payment/records/top |
查询最近支付流水 |
在用 |
10. 企业产品库
10.1 产品库与产品
| 方法与路径 |
大概用途 |
状态 |
GET/POST /v1/product-libraries |
查询、创建产品库 |
在用 |
PATCH/DELETE /v1/product-libraries/{library_id} |
修改、删除产品库 |
在用 |
GET/POST /v1/product-libraries/{library_id}/products |
查询、录入产品 |
在用 |
POST /v1/product-libraries/{library_id}/products/batch-delete |
批量删除产品 |
后端保留 |
PUT/DELETE /v1/product-libraries/{library_id}/products/{product_id} |
修改、删除单个产品 |
在用 |
10.2 产品文件解析
| 方法与路径 |
大概用途 |
状态 |
POST /v1/product-libraries/{library_id}/parse/presigned-url |
获取产品文件上传签名 |
在用 |
GET /v1/product-libraries/{library_id}/parse/upload-rules |
查询产品导入规则 |
在用 |
POST /v1/product-libraries/{library_id}/parse/confirm-upload |
确认上传并开始解析 |
在用 |
GET /v1/product-libraries/{library_id}/parse/jobs/{parse_job_id}/events |
订阅产品解析进度 |
在用 |
POST /v1/product-libraries/{library_id}/parse/jobs/{parse_job_id}/cancel |
取消解析任务 |
在用 |
11. 健康检查与支付回调
| 方法与路径 |
大概用途 |
状态 |
GET /health/live |
轻量存活检查 |
系统/外部 |
GET /health/ready |
数据库、Redis、LLM 依赖就绪检查 |
系统/外部 |
POST /webhook/alipay/notify |
支付宝异步支付回调 |
系统/外部 |
POST /webhook/wechat/notify |
微信支付异步支付回调 |
系统/外部 |
POST /v1/webhook/alipay/notify |
支付宝回调的 /v1 别名 |
系统/外部 |
POST /v1/webhook/wechat/notify |
微信回调的 /v1 别名 |
系统/外部 |
12. 管理后台与内部接口
12.1 支付、套餐与核销码
| 方法与路径 |
大概用途 |
状态 |
GET /admin/character-transactions |
查询全站字数额度流水 |
内部管理 |
GET /admin/daily-reports |
按北京时间查询注册、支付与 LLM Token 日报 |
内部管理 |
GET /admin/reports/business-users |
查询工作台访问与关键业务成功用户数报表 |
内部管理 |
GET /admin/payment-records |
查询全站支付流水 |
内部管理 |
POST /admin/subscription/manual-grant |
手工给用户发放套餐 |
内部管理 |
GET/POST /admin/subscription-plans |
分页查询、创建套餐 |
内部管理 |
GET/PATCH/DELETE /admin/subscription-plans/{plan_id} |
查看、修改、删除未使用套餐 |
内部管理 |
GET /admin/redeem-codes |
查询核销码 |
在用(管理页) |
12.2 Prompt 场景绑定
| 方法与路径 |
大概用途 |
状态 |
GET /admin/prompts/scenes |
查询 Prompt 场景元数据 |
内部管理 |
GET /admin/prompt-scene-bindings/scenes |
查询可绑定场景 |
内部管理 |
GET/POST /admin/prompt-scene-bindings |
查询、创建场景绑定 |
内部管理 |
GET/PATCH/DELETE /admin/prompt-scene-bindings/{binding_id} |
查看、修改、删除场景绑定 |
内部管理 |
12.3 Prompt 模板与版本
| 方法与路径 |
大概用途 |
状态 |
GET/POST /admin/prompt-templates |
查询、创建 Prompt 模板 |
部分在用(当前管理页主要查询) |
GET/PATCH/DELETE /admin/prompt-templates/{template_id} |
查看、替换、删除模板 |
后端保留 |
GET/POST/PATCH /admin/prompt-templates/{template_id}/versions |
查询、新建或基于最新版本更新 |
在用(管理页使用查询和更新) |
GET/DELETE /admin/prompt-templates/{template_id}/versions/{version_no} |
查看、删除指定版本 |
后端保留 |
12.4 内部标书与 Prompt 文件工具
| 方法与路径 |
大概用途 |
状态 |
GET /admin/internal/tenders/files |
查询本地 Prompt 文件 |
内部管理 |
GET/PUT /admin/internal/tenders/files/{file_path:path} |
读取、修改 Prompt 文件 |
内部管理 |
POST /admin/internal/tenders/create |
内部创建测试标书 |
内部管理 |
GET /admin/internal/tenders/{tender_id} |
查询内部测试标书详情 |
内部管理 |
POST /admin/internal/tenders/quick/parse |
兼容路径:快速解析单文件 |
内部管理 |
POST /admin/internal/tenders/quick-parse |
快速解析单文件 |
内部管理 |
12.5 短信验证码白名单
| 方法与路径 |
大概用途 |
状态 |
GET/POST /admin/sms-verification-whitelists |
查询、添加短信白名单 |
在用(管理页) |
12.6 用户与订阅维护审计
| 方法与路径 |
大概用途 |
状态 |
GET /admin/users |
查询用户、角色、额度与订阅摘要 |
内部管理 |
GET /admin/subscription-maintenance-logs |
查询订阅定时维护执行记录 |
内部管理 |
GET /admin/subscription-maintenance-logs/{log_id}/details |
查询单次维护的明细 |
内部管理 |
13. 后端存在代码但当前未注册的接口
以下接口不会出现在当前应用路由表中。
| 方法与路径 |
大概用途 |
状态 |
POST /v1/knowledges/{kb_id}/directory |
创建知识库目录 |
未注册 |
GET /v1/knowledges/{kb_id}/directory/list |
查询知识库目录 |
未注册 |
GET /v1/knowledges/{kb_id}/directory/{directory_id} |
查询目录详情 |
未注册 |
PUT /v1/knowledges/{kb_id}/dirs/{directory_id} |
修改知识库目录 |
未注册 |
DELETE /v1/knowledges/{kb_id}/dirs/{directory_id} |
删除知识库目录 |
未注册 |
图片文件批量上传/自动标注等 app/routes/v1/images/file.py 中已注释路由 |
历史图片处理能力 |
未注册 |
知识库文件批量上传等 app/routes/v1/knowledges/file.py 中已注释路由 |
历史知识库上传能力 |
未注册 |
14. 前端存在但当前后端不存在的路径
这些不是后端现有接口,但当前前端仍能找到调用或封装,属于 MVP v1 后续需要核对的契约残留。
| 前端路径 |
前端用途 |
当前情况 |
POST /v1/users/change-password |
修改密码 |
后端无对应路由,前端修改密码弹窗仍在调用 |
POST /v1/users/phone/bind |
绑定手机号 |
当前后端无对应路由 |
GET /v1/knowledges/{kb_id}/files/{file_id}/parse-job |
查询知识库解析任务 |
后端已删除,前端仍有未使用封装 |
POST /v1/knowledges/{kb_id}/search |
知识库语义检索 |
后端已删除,前端仍有未使用封装;内部检索服务继续使用 |
POST /v1/image-galleries/{gallery_id}/upload |
旧式图库 multipart 上传 |
当前后端无对应路由;现流程使用直传签名与确认接口 |
GET /v1/tenders/documents/parse/history |
查询招标文件解析历史 |
当前后端无对应路由 |
PUT /v1/tenders/{tender_id}/outline |
整体替换目录 |
后端已删除,前端仍有未使用封装;现流程使用节点级更新接口 |
PUT /v1/tenders/{tender_id}/outline/node/children |
整体更新节点子目录 |
当前后端无对应路由 |
GET /v1/tenders/{tender_id}/outline/prompts |
查询目录 Prompt |
当前后端无对应路由;现有 Prompt 路径为 /prompts/preview 和 /prompts/{scene_key} |
POST /v1/product-libraries/{library_id}/parse/upload |
旧式产品文件 multipart 上传 |
当前后端无对应路由;现流程使用预签名与确认接口 |
15. 接口测试基线
截至 2026-07-26,原有 19 个测试文件主要覆盖 Service、Schema、工具函数,以及少量直接调用路由函数的业务逻辑。本次新增 tests/test_api_contract.py,先覆盖 OpenAPI 与本文一致性、模块路由数量、operationId 唯一性、Summary 与 Tags 完整性。当前仍没有通过 FastAPI ASGI/HTTP 客户端请求应用的业务接口测试,因此不能仅依据现有测试确认以下接口层行为:
- 路由是否能按预期的方法和路径访问。
- 未登录、普通用户和管理员的鉴权与权限边界。
- Path、Query、Body 参数校验及统一参数错误响应。
BizException、HTTPException 和未捕获异常的统一响应转换。
- Response Model、响应头、文件下载和 SSE Content-Type 等接口契约。
- 依赖注入、租户上下文和资源归属校验在真实请求链路中是否生效。
15.1 按模块划分测试
| 模块 |
接口数 |
优先级 |
状态 |
建议测试文件 |
首要测试范围 |
| OpenAPI 契约 |
168 |
P0 |
已新增 |
test_api_contract.py |
路由与文档一致、模块数量、Operation ID、Summary、Tags |
| 用户、认证与额度 |
8 |
P0 |
代码链路已覆盖 |
tests/api/users/ |
验证码/密码登录、Token、资料、额度、角色权限 |
| 标书 |
60 |
P0 |
契约已新增 |
tests/api/tenders/ |
用户隔离、CRUD、解析、目录、正文、全文任务、SSE、DOCX |
| 订阅、订单与支付 |
5 |
P0 |
代码链路已覆盖 |
tests/api/billing_callbacks/ |
套餐可见性、下单、本人订单、支付记录、额度联动 |
| 异步任务 |
5 |
P1 |
代码链路已覆盖 |
tests/api/tasks/ |
用户任务隔离、状态查询、取消、SSE 终态 |
| 知识库 |
15 |
P1 |
代码链路已覆盖 |
tests/api/knowledges/ |
CRUD、文件直传确认、重解析、重建索引、助手 SSE |
| 图库与图片 |
14 |
P1 |
代码链路已覆盖 |
tests/api/image_galleries/ |
CRUD、直传确认、图片归属、抽图确认、分析 SSE |
| 企业产品库 |
14 |
P1 |
代码链路已覆盖 |
tests/api/product_libraries/ |
CRUD、产品归属、批量删除、导入任务、取消和 SSE |
| 通用文件上传 |
2 |
P1 |
代码链路已覆盖 |
tests/api/admin_system/ |
文件名/类型/大小校验、预签名、OSS 元数据确认 |
| 管理后台与内部接口 |
39 |
P1 |
代码链路已覆盖 |
tests/api/admin_prompts/、tests/api/billing_callbacks/、tests/api/admin_system/ |
管理员 CRUD、Prompt、支付套餐、内部接口 |
| 支付回调 |
4 |
P1 |
代码链路已覆盖 |
tests/api/billing_callbacks/ |
两组别名、验签失败、成功回调、重复通知幂等 |
| 健康检查 |
2 |
P2 |
代码链路已覆盖 |
tests/api/admin_system/ |
存活检查、数据库/LLM 正常与降级结果 |
标书模块数量最大,建议在测试文件中继续按“基础 CRUD 与解析”“目录与编写思路”“正文与全文生成”“文件下载与 SSE”分组,不把 60 个接口堆在一个测试类中。
全仓测试通过 make test 一键运行,可用 PYTEST_ARGS 追加 pytest 参数;原测试环境 API 启动命令调整为 make serve-test。标书测试也可通过 ./scripts/test-tender-api.sh 或 make test-tender-api 独立运行;脚本输出终端缺失行报告,并生成 htmlcov/tenders/ 下的 HTML/XML 覆盖率报告。统计范围为标书路由、标书领域服务和生成服务,代码链路行覆盖率硬门禁为 100%。60 个操作分别拥有独立测试文件,显式冻结参数、请求体、响应状态、响应模型、递归组件 Schema、认证和响应类型;具体业务场景继续按 tests/api/tenders/README.md 补充。
知识库 15 个操作分别拥有独立契约测试文件,并通过 ./scripts/test-knowledge-api.sh 或 make test-knowledge-api 运行专项测试。统计范围为当前注册接口使用的知识库路由与服务,排除未注册的历史 directory.py 路由文件,代码链路行覆盖率硬门禁为 100%;HTML/XML 报告写入 htmlcov/knowledges/。
企业产品库 14 个操作分别拥有独立契约测试文件,并通过 ./scripts/test-product-library-api.sh 或 make test-product-library-api 运行专项测试。统计范围为产品库路由、产品库主服务和 SSE 服务,覆盖 CRUD、XLSX 结构化解析、内嵌图片、任务状态机与编排异常,代码链路行覆盖率硬门禁为 100%;HTML/XML 报告写入 htmlcov/product_libraries/。
图库 14 个操作分别拥有独立契约测试文件,并通过 ./scripts/test-image-gallery-api.sh 或 make test-image-gallery-api 运行专项测试。统计范围为图库路由、图库与图片文件服务、分析 SSE 和文档抽图器,代码链路行覆盖率硬门禁为 100%;HTML/XML 报告写入 htmlcov/image_galleries/。
用户认证与额度 8 个操作、任务中心 5 个操作分别拥有独立契约测试文件。可通过 make test-user-api、make test-task-api 运行专项测试,两个模块的代码链路行覆盖率硬门禁均为 100%;报告分别写入 htmlcov/users/ 与 htmlcov/tasks/。
15.2 建设顺序
后续接口测试建议按以下顺序建设:
- OpenAPI 契约测试:固定当前方法与路径集合,防止新增、删除或改名接口后漏改本文和测试清单。
- 通用协议测试:覆盖鉴权、权限、参数错误、业务异常和系统异常的统一响应。
- 核心闭环测试:优先覆盖登录、标书 CRUD、上传确认与任务创建、目录、正文生成任务、知识库、图库、产品导入、额度和支付。
- SSE 与文件测试:分别验证事件顺序、终止事件、断线行为,以及文件名、Content-Type 和下载响应头。
- 管理与外部入口测试:覆盖管理员权限、支付回调幂等、健康检查降级和内部工具接口隔离。
16. MVP v1 收口建议
- 把“后端保留”接口先视为候选清理项,不要立即删除;先确认是否被脚本、运营工具或第三方调用。
- 优先处理第 14 节的前后端路径不一致,因为这些属于明确的接口契约风险。
- 支付回调目前同时注册无
/v1 和带 /v1 两套路由,发布前应确认生产环境实际配置的唯一回调地址。
- 知识库目录路由代码存在但未注册;若 MVP v1 不需要目录层级,可以继续保持未启用,并在后续清理时统一决定是否删除。