[M-AI-07-05] 将 Quiz 生成入口接入统一 AiJob Engine #324

Closed
opened 2026-06-22 20:23:23 +08:00 by wangdl · 1 comment
Owner

类型 / 标签

  • backend / quiz / api / feature-flag

风险等级

P0 — 入口路由错误会导致双执行或请求丢失

依赖

  • M-AI-07-02 / M-AI-07-03 / M-AI-07-04

目标

保持原公开接口,在 Legacy 和 Unified Quiz Generation 之间增加互斥、可回滚的执行路由。

Router

新增 QuizGenerationExecutionRouter。QUIZ_GENERATION_ENGINE_MODE=legacy → 原 Quiz Generation Service/Queue。QUIZ_GENERATION_ENGINE_MODE=unified → SnapshotBuilder → AiJobCreationService。

Unified 流程

校验请求参数 → 校验资源所有权 → 确定稳定 submissionId → 构造幂等键 → 构建 Snapshot → 调用 CreationService → 返回兼容响应 → Outbox 异步执行。

幂等

相同 submissionId:返回同一个 Job、只有一个 Snapshot/Outbox、不重复扣费、不重复创建 Quiz。用户主动重新生成应使用新 submission/version。

分支互斥

禁止:Legacy 和 Unified 双执行、Unified 失败后自动调用 Legacy、在多个 Service 中重复判断 Flag、Controller 直接入队、Redis Payload 携带学习内容。

响应兼容

保留旧字段:jobId、status、quizId 或生成请求信息、错误结构、HTTP 状态码。允许新增可选 engineMode/lifecycleStatus,不得删除旧字段。

验收标准

  • Legacy 路径未破坏
  • Unified 创建成功(Job+Snapshot+Outbox 同事务)
  • 分支互斥
  • 失败不 fallback
  • 重复请求幂等
  • 权限不变
  • 响应兼容
  • 单元和集成测试通过

建议执行顺序

第 5 个执行

## 类型 / 标签 - backend / quiz / api / feature-flag ## 风险等级 P0 — 入口路由错误会导致双执行或请求丢失 ## 依赖 - M-AI-07-02 / M-AI-07-03 / M-AI-07-04 ## 目标 保持原公开接口,在 Legacy 和 Unified Quiz Generation 之间增加互斥、可回滚的执行路由。 ## Router 新增 `QuizGenerationExecutionRouter`。QUIZ_GENERATION_ENGINE_MODE=legacy → 原 Quiz Generation Service/Queue。QUIZ_GENERATION_ENGINE_MODE=unified → SnapshotBuilder → AiJobCreationService。 ## Unified 流程 校验请求参数 → 校验资源所有权 → 确定稳定 submissionId → 构造幂等键 → 构建 Snapshot → 调用 CreationService → 返回兼容响应 → Outbox 异步执行。 ## 幂等 相同 submissionId:返回同一个 Job、只有一个 Snapshot/Outbox、不重复扣费、不重复创建 Quiz。用户主动重新生成应使用新 submission/version。 ## 分支互斥 禁止:Legacy 和 Unified 双执行、Unified 失败后自动调用 Legacy、在多个 Service 中重复判断 Flag、Controller 直接入队、Redis Payload 携带学习内容。 ## 响应兼容 保留旧字段:jobId、status、quizId 或生成请求信息、错误结构、HTTP 状态码。允许新增可选 engineMode/lifecycleStatus,不得删除旧字段。 ## 验收标准 - [ ] Legacy 路径未破坏 - [ ] Unified 创建成功(Job+Snapshot+Outbox 同事务) - [ ] 分支互斥 - [ ] 失败不 fallback - [ ] 重复请求幂等 - [ ] 权限不变 - [ ] 响应兼容 - [ ] 单元和集成测试通过 ## 建议执行顺序 第 5 个执行
wangdl added this to the M-AI-07 Quiz 生成与题目产物统一引擎迁移 milestone 2026-06-22 20:23:23 +08:00
Author
Owner

开发完成评论

完成内容

  • QuizExecutionRouter: QUIZ_GENERATION_ENGINE_MODE flag (legacy/unified)
  • Controller wiring: quiz_generation routes through Router
  • Legacy path: UserAiService.createAnalysisJob() unchanged
  • Unified path: SnapshotBuilder + AiJobCreationService.createJob()
  • Response compat: jobId/status + optional engineMode/lifecycleStatus
  • Flag failure → safe fallback to legacy

修改文件

  • src/modules/ai-runtime/quiz-execution-router.ts — new (96 lines)
  • src/modules/ai-runtime/user-ai.controller.ts — modified (+7 lines)
  • src/modules/ai-runtime/user-ai.controller.spec.ts — modified (+18 lines)
  • src/modules/ai-runtime/ai-runtime.module.ts — modified (+4 lines)

路由流程

测试情况

  • 292 passed (user-ai + ai-runtime) = 0 failed

是否建议进入 Review

  • 是 — 建议进入 M-AI-07-06
## 开发完成评论 ### 完成内容 - QuizExecutionRouter: QUIZ_GENERATION_ENGINE_MODE flag (legacy/unified) - Controller wiring: quiz_generation routes through Router - Legacy path: UserAiService.createAnalysisJob() unchanged - Unified path: SnapshotBuilder + AiJobCreationService.createJob() - Response compat: jobId/status + optional engineMode/lifecycleStatus - Flag failure → safe fallback to legacy ### 修改文件 - src/modules/ai-runtime/quiz-execution-router.ts — new (96 lines) - src/modules/ai-runtime/user-ai.controller.ts — modified (+7 lines) - src/modules/ai-runtime/user-ai.controller.spec.ts — modified (+18 lines) - src/modules/ai-runtime/ai-runtime.module.ts — modified (+4 lines) ### 路由流程 ### 测试情况 - 292 passed (user-ai + ai-runtime) = 0 failed ### 是否建议进入 Review - 是 — 建议进入 M-AI-07-06
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/api-server#324
No description provided.