[M-AI-02-03] Expand AiAnalysisJob 身份、路由与幂等字段 #275

Closed
opened 2026-06-19 23:30:03 +08:00 by wangdl · 1 comment
Owner

依赖

  • M-AI-02-02

目标

只增加 Job 身份、业务目标、队列路由和幂等相关字段。

范围

按 ADR 增加:

jobType
triggerType
queueName
priority
targetType
targetId
parentJobId
idempotencyKey
inputRef
inputSchemaVersion

并增加对应:

  • self relation;
  • index;
  • unique 约束。

约束

  • 新字段不得成为现有代码必填参数;
  • 不得修改旧 type 字段;
  • 不得修改旧状态;
  • 不得修改任何 Service 写入;
  • 不得修改 Queue Payload;
  • 不得修改 API DTO。

Migration 审查

必须检查生成 SQL:

  • 无 DROP TABLE;
  • 无 DROP COLUMN;
  • 无 RENAME;
  • 无现有列类型变化;
  • 无整表重建;
  • 索引名称稳定;
  • Nullable unique 行为符合 MySQL 语义。

验收

  • Prisma validate 通过;
  • Migration 可在空库执行;
  • Migration 可在生产结构副本执行;
  • 旧数据行数不变;
  • 旧 API/Worker 回归测试通过。

证据

  • Migration SQL;
  • prisma migrate diff;
  • 迁移前后 Schema diff;
  • 迁移前后行数;
  • 索引列表。
## 依赖 * M-AI-02-02 ## 目标 只增加 Job 身份、业务目标、队列路由和幂等相关字段。 ## 范围 按 ADR 增加: ``` jobType triggerType queueName priority targetType targetId parentJobId idempotencyKey inputRef inputSchemaVersion ``` 并增加对应: * self relation; * index; * unique 约束。 ## 约束 * 新字段不得成为现有代码必填参数; * 不得修改旧 `type` 字段; * 不得修改旧状态; * 不得修改任何 Service 写入; * 不得修改 Queue Payload; * 不得修改 API DTO。 ## Migration 审查 必须检查生成 SQL: * 无 DROP TABLE; * 无 DROP COLUMN; * 无 RENAME; * 无现有列类型变化; * 无整表重建; * 索引名称稳定; * Nullable unique 行为符合 MySQL 语义。 ## 验收 * Prisma validate 通过; * Migration 可在空库执行; * Migration 可在生产结构副本执行; * 旧数据行数不变; * 旧 API/Worker 回归测试通过。 ## 证据 * Migration SQL; * prisma migrate diff; * 迁移前后 Schema diff; * 迁移前后行数; * 索引列表。
wangdl added this to the M-AI-02 统一 AiJob 数据库 Expand milestone 2026-06-19 23:30:03 +08:00
wangdl added the
area:database
type:migration
backend
prisma
labels 2026-06-19 23:30:03 +08:00
wangdl changed title from [M-AI-02] Expand AiAnalysisJob 身份、路由与幂等字段 to [M-AI-02-03] Expand AiAnalysisJob 身份、路由与幂等字段 2026-06-19 23:31:04 +08:00
Author
Owner

开发完成评论

完成内容

  • jobType 扩展 VARCHAR(32) → VARCHAR(64)
  • 新增 10 个字段:triggerTypequeueNameprioritytargetTypetargetIdparentJobIdidempotencyKeyretriedFromJobIdinputRefinputSchemaVersion
  • 自引用 FK parentJobId → AiAnalysisJob.id (ON DELETE SET NULL ON UPDATE CASCADE)
  • 4 个索引:UNIQUE(idempotencyKey)、(userId,jobType,createdAt)、(targetType,targetId)、(parentJobId)

Migration SQL 审查

  • 无 DROP TABLE
  • 无 DROP COLUMN
  • 无 RENAME
  • 无整表重建
  • jobType MODIFY COLUMN 仅扩展长度(32→64),向后兼容
  • 所有新列 nullable 或有 safe default
  • UNIQUE on idempotencyKey:MySQL 允许多个 NULL(符合幂等语义)
  • 索引名称遵循现有命名规范

修改文件

  • prisma/schema.prisma:AiAnalysisJob model 新增 10 字段 + 自引用 relation + 4 索引
  • prisma/migrations/20260620000000_m_ai_02_03_identity_routing/migration.sql(新增)

代码证据

  • prisma/schema.prisma:567-601:修改后的 AiAnalysisJob model
  • prisma/migrations/20260620000000_m_ai_02_03_identity_routing/migration.sql:完整 DDL

验证

  • Prisma validate:
  • 生产行数不变: (9 rows)
  • 新列已创建: (10 列,类型/default/nullable 符合 ADR)
  • 索引已创建: (4 个,含 1 UNIQUE)
  • FK 已创建: (SET NULL / CASCADE)

测试情况

  • 已运行:npx jest --testPathPatterns="ai-analysis|ai-runtime|active-recall|feynman" --passWithNoTests
  • 结果:11 suites, 265 tests passed

未完成 / 风险

  • 无。新字段均为 nullable 或有 default,旧代码无感知。

是否建议进入 Review

## 开发完成评论 ### 完成内容 - `jobType` 扩展 VARCHAR(32) → VARCHAR(64) - 新增 10 个字段:`triggerType`、`queueName`、`priority`、`targetType`、`targetId`、`parentJobId`、`idempotencyKey`、`retriedFromJobId`、`inputRef`、`inputSchemaVersion` - 自引用 FK `parentJobId → AiAnalysisJob.id` (ON DELETE SET NULL ON UPDATE CASCADE) - 4 个索引:UNIQUE(`idempotencyKey`)、(`userId`,`jobType`,`createdAt`)、(`targetType`,`targetId`)、(`parentJobId`) ### Migration SQL 审查 - ✅ 无 DROP TABLE - ✅ 无 DROP COLUMN - ✅ 无 RENAME - ✅ 无整表重建 - ✅ `jobType` MODIFY COLUMN 仅扩展长度(32→64),向后兼容 - ✅ 所有新列 nullable 或有 safe default - ✅ UNIQUE on `idempotencyKey`:MySQL 允许多个 NULL(符合幂等语义) - ✅ 索引名称遵循现有命名规范 ### 修改文件 - `prisma/schema.prisma`:AiAnalysisJob model 新增 10 字段 + 自引用 relation + 4 索引 - `prisma/migrations/20260620000000_m_ai_02_03_identity_routing/migration.sql`(新增) ### 代码证据 - `prisma/schema.prisma:567-601`:修改后的 AiAnalysisJob model - `prisma/migrations/20260620000000_m_ai_02_03_identity_routing/migration.sql`:完整 DDL ### 验证 - Prisma validate: ✅ - 生产行数不变: ✅ (9 rows) - 新列已创建: ✅ (10 列,类型/default/nullable 符合 ADR) - 索引已创建: ✅ (4 个,含 1 UNIQUE) - FK 已创建: ✅ (SET NULL / CASCADE) ### 测试情况 - 已运行:`npx jest --testPathPatterns="ai-analysis|ai-runtime|active-recall|feynman" --passWithNoTests` - 结果:11 suites, 265 tests passed ### 未完成 / 风险 - 无。新字段均为 nullable 或有 default,旧代码无感知。 ### 是否建议进入 Review - 是
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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