[M-AI-02-08] 扩展 AiUsageLog 的 Job、尝试次数与凭据归属 #280

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

依赖

  • M-AI-02-07

目标

建立 Provider 调用用量与统一 Job 的关系,为未来重试、回退、平台 Key 和用户 Key 分账提供数据基础。

范围

按 ADR增加 nullable 字段:

jobId
attemptNo
credentialMode
errorCode

如审计证明缺失,可同时增加:

providerRequestId

但必须在 ADR 中已冻结。

关系

  • jobId nullable;
  • Job 删除时 UsageLog 使用 SetNull,不得删除历史用量;
  • 历史日志全部保留;
  • 现有写入代码不要求立即提供新字段。

索引

至少评估:

(jobId, attemptNo)
(userId, createdAt)
(provider, model, createdAt)
(errorCode, createdAt)

非目标

  • 不修改计费算法;
  • 不改变会员额度;
  • 不改变 Token 统计;
  • 不接入 User Key;
  • 不修改 Admin 报表语义。

验收

  • 现有 UsageLog 插入不受影响;
  • 旧数据行数不变;
  • Job 删除不会删除 UsageLog;
  • 索引查询计划符合预期;
  • 现有额度测试全部通过。
## 依赖 * M-AI-02-07 ## 目标 建立 Provider 调用用量与统一 Job 的关系,为未来重试、回退、平台 Key 和用户 Key 分账提供数据基础。 ## 范围 按 ADR增加 nullable 字段: ``` jobId attemptNo credentialMode errorCode ``` 如审计证明缺失,可同时增加: ``` providerRequestId ``` 但必须在 ADR 中已冻结。 ## 关系 * `jobId` nullable; * Job 删除时 UsageLog 使用 `SetNull`,不得删除历史用量; * 历史日志全部保留; * 现有写入代码不要求立即提供新字段。 ## 索引 至少评估: ``` (jobId, attemptNo) (userId, createdAt) (provider, model, createdAt) (errorCode, createdAt) ``` ## 非目标 * 不修改计费算法; * 不改变会员额度; * 不改变 Token 统计; * 不接入 User Key; * 不修改 Admin 报表语义。 ## 验收 - 现有 UsageLog 插入不受影响; - 旧数据行数不变; - Job 删除不会删除 UsageLog; - 索引查询计划符合预期; - 现有额度测试全部通过。
wangdl added this to the M-AI-02 统一 AiJob 数据库 Expand milestone 2026-06-19 23:30:04 +08:00
wangdl added the
area:database
backend
prisma
billing
labels 2026-06-19 23:30:04 +08:00
wangdl changed title from [M-AI-02] 扩展 AiUsageLog 的 Job、尝试次数与凭据归属 to [M-AI-02-08] 扩展 AiUsageLog 的 Job、尝试次数与凭据归属 2026-06-19 23:31:05 +08:00
Author
Owner

开发完成评论

完成内容

  • 新增 5 个字段:jobIdattemptNocredentialModeerrorCodeproviderRequestId
  • FK jobId → AiAnalysisJob.idON DELETE SET NULL(Job 删除保留审计记录)
  • 3 个新索引:(jobId, attemptNo)(provider, model, createdAt)(errorCode, createdAt)
  • AiAnalysisJob.usageLogs 反向 relation

Migration SQL 审查

  • 无 DROP/DROP COLUMN/RENAME
  • 所有新列 nullable 或有 safe default
  • jobId NULL — 现有代码无需立即提供
  • SET NULL — Job 删除时 UsageLog 保留,符合审计要求
  • 历史 110 行数据全部保留,credentialMode 默认 "platform_key" 自动应用

修改文件

  • prisma/schema.prismaAiUsageLog 新增 5 字段 + FK + 3 索引;AiAnalysisJob 新增 usageLogs relation
  • prisma/migrations/20260620000005_m_ai_02_08_ai_usage_log_expand/migration.sql(新增)

验证

  • Row count: 110 → 110
  • 5 列类型/default 正确
  • FK:SET NULL / CASCADE
  • 旧代码插入兼容:existing tests pass

测试情况

  • 回归测试:303 passed

是否建议进入 Review

## 开发完成评论 ### 完成内容 - 新增 5 个字段:`jobId`、`attemptNo`、`credentialMode`、`errorCode`、`providerRequestId` - FK `jobId → AiAnalysisJob.id`,`ON DELETE SET NULL`(Job 删除保留审计记录) - 3 个新索引:`(jobId, attemptNo)`、`(provider, model, createdAt)`、`(errorCode, createdAt)` - `AiAnalysisJob.usageLogs` 反向 relation ### Migration SQL 审查 - ✅ 无 DROP/DROP COLUMN/RENAME - ✅ 所有新列 nullable 或有 safe default - ✅ `jobId` NULL — 现有代码无需立即提供 - ✅ `SET NULL` — Job 删除时 UsageLog 保留,符合审计要求 - ✅ 历史 110 行数据全部保留,`credentialMode` 默认 `"platform_key"` 自动应用 ### 修改文件 - `prisma/schema.prisma`:`AiUsageLog` 新增 5 字段 + FK + 3 索引;`AiAnalysisJob` 新增 `usageLogs` relation - `prisma/migrations/20260620000005_m_ai_02_08_ai_usage_log_expand/migration.sql`(新增) ### 验证 - Row count: 110 → 110 ✅ - 5 列类型/default 正确 ✅ - FK:SET NULL / CASCADE ✅ - 旧代码插入兼容:existing tests pass ✅ ### 测试情况 - 回归测试:303 passed ✅ ### 是否建议进入 Review - 是
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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