diff --git a/docs/designs/data-ops-bulk-actions-api.zh.html b/docs/designs/data-ops-bulk-actions-api.zh.html index 92ea960..e9d8ec2 100644 --- a/docs/designs/data-ops-bulk-actions-api.zh.html +++ b/docs/designs/data-ops-bulk-actions-api.zh.html @@ -347,15 +347,15 @@
Data Ops Bulk Actions
- 为数据明细页面提供“按当前筛选结果批量质检”和“按当前筛选结果批量云同步”的后端能力。第一版提供确认前预览和轻量级异步执行 API,不做持久化批任务、进度查询或取消。 + 为数据明细页面提供“按当前筛选结果批量质检”和“按当前筛选结果批量云同步”的后端能力。第一版保留确认前预览和异步执行模型,并为批量质检增加短期 run snapshot 与 SSE 实时进度;批量同步暂不接入实时进度。
@@ -365,6 +365,7 @@202 Accepted 后由后台 goroutine 异步处理。run_id,后台 goroutine 异步处理,并通过 snapshot API 与 SSE 暴露聚合进度。queued 或 running run。202 Accepted 后异步处理,本轮不接入实时进度。202 Accepted,后台继续处理,不等待整批完成。
+ 两个执行接口仍不等待整批完成;批量 QA 返回 run_id,批量同步保持轻量 accepted 模型。
total_count 以执行时快照为准。
bulk_runs 进度事实表、snapshot API 和单 run SSE stream。SSE 只推聚合进度,不推 episode 明细。
+ bulk_qa run 处于 queued 或 running;再次提交返回 409 和现有 run_id。
+ queued、running、completed、failed、interrupted。质检不通过或单条处理失败不改变 run 的 completed 终态。
+ fetch streaming 消费 SSE,并携带 Authorization: Bearer ...;不使用原生 EventSource,不把 token 放入 query string。
+ {
- "status": "accepted",
- "matched_count": 123,
+ "run": {
+ "run_id": "bulk_qa_20260611_073012_a8f3c9",
+ "action": "bulk_qa",
+ "status": "queued",
+ "total_count": 123,
+ "processed_count": 0,
+ "passed_count": 0,
+ "qa_failed_count": 0,
+ "processing_failed_count": 0,
+ "skipped_count": 0,
+ "started_at": null,
+ "updated_at": "2026-06-11T07:30:12Z",
+ "finished_at": null,
+ "error_message": ""
+ },
"message": "123 episodes accepted for bulk QA"
}
- GET /api/v1/data-ops/bulk-runs/:run_id
{
+ "run_id": "bulk_qa_20260611_073012_a8f3c9",
+ "action": "bulk_qa",
+ "status": "running",
+ "total_count": 123,
+ "processed_count": 80,
+ "passed_count": 52,
+ "qa_failed_count": 18,
+ "processing_failed_count": 2,
+ "skipped_count": 8,
+ "started_at": "2026-06-11T07:30:12Z",
+ "updated_at": "2026-06-11T07:32:20Z",
+ "finished_at": null,
+ "error_message": ""
+}
+
+ GET /api/v1/data-ops/bulk-runs/current?action=bulk_qa
如果存在 queued 或 running 的批量 QA run,返回同样的 snapshot;否则返回 204 No Content。该接口只用于页面加载时发现当前运行,不提供历史任务中心。
GET /api/v1/data-ops/bulk-runs/:run_id/stream
前端使用 fetch streaming 连接,并携带 Authorization: Bearer <token>。连接前应先调用 snapshot;只有 queued 或 running 状态才建立 stream。
event: bulk_run_snapshot
+data: {"run_id":"bulk_qa_20260611_073012_a8f3c9","action":"bulk_qa","status":"running","total_count":123,"processed_count":80,"passed_count":52,"qa_failed_count":18,"processing_failed_count":2,"skipped_count":8,"started_at":"2026-06-11T07:30:12Z","updated_at":"2026-06-11T07:32:20Z","finished_at":null,"error_message":""}
+
+event: bulk_run_progress
+data: {"run_id":"bulk_qa_20260611_073012_a8f3c9","action":"bulk_qa","status":"running","total_count":123,"processed_count":81,"passed_count":53,"qa_failed_count":18,"processing_failed_count":2,"skipped_count":8,"started_at":"2026-06-11T07:30:12Z","updated_at":"2026-06-11T07:32:21Z","finished_at":null,"error_message":""}
+
+event: bulk_run_completed
+data: {"run_id":"bulk_qa_20260611_073012_a8f3c9","action":"bulk_qa","status":"completed","total_count":123,"processed_count":123,"passed_count":90,"qa_failed_count":25,"processing_failed_count":2,"skipped_count":6,"started_at":"2026-06-11T07:30:12Z","updated_at":"2026-06-11T07:35:12Z","finished_at":"2026-06-11T07:35:12Z","error_message":""}
+
+event: ping
+data: {"ts":"2026-06-11T07:32:22Z"}
+ SSE 事件使用 generic 命名:bulk_run_snapshot、bulk_run_progress、bulk_run_completed、bulk_run_failed、bulk_run_interrupted 和 ping。所有业务事件 payload 使用同一套 snapshot 结构。
POST /api/v1/data-ops/episodes/bulk-sync
{
"confirm": true,
@@ -536,7 +606,7 @@ 3.3 批量云同步执行
503 |
{ "error": "qa service is not configured" } |
||||||||||||
| 已有批量 QA 正在运行 | +409 |
+ { "error": "bulk qa already running", "run_id": "...", "status": "running" } |
+ |||||||||||
| sync worker 未配置或未运行 | 503 |
@@ -669,7 +744,7 @@
| 接受批量请求 | -[DATA_OPS] Bulk QA accepted: matched=123 |
+ [DATA_OPS] Bulk QA accepted: run_id=bulk_qa_... total=123 |
| 批量完成 | -[DATA_OPS] Bulk QA completed: matched=123, attempted=120, skipped=2, failed=1 |
+ [DATA_OPS] Bulk QA completed: run_id=bulk_qa_... total=123 processed=123 passed=90 qa_failed=25 processing_failed=2 skipped=6 |
| 单条异常失败 | -逐条打印 episode ID 和错误。 | +逐条打印 run_id、episode ID 和错误。 |
+
| 运行中断 | +服务启动标记遗留 run 为 interrupted 时打印 run 数量和 run_id。 |
|
| 正常跳过 | @@ -800,7 +982,7 @@