feat: create端点兜底复用预览产物 + confirm同步标题 #1486

Merged
auto-approve-bot merged 2 commits from feat/create-endpoint-reuse-preview into develop 2026-08-24 23:31:00 +08:00
Owner

改动

1. create端点兜底复用预览产物

前端刷新页面后 previewTaskId 丢失,降级调 create 接口时,如果同一 edit_plan 有已完成的预览任务,直接复用(秒出),不创建新任务、不入队。

  • 查询条件:source_edit_plan_id + is_preview=True + status=completed + 当前用户
  • 分辨率一致性校验(与 confirm 端点相同逻辑)
  • 仅对 is_preview=False 的正式生成请求生效

2. confirm端点同步标题

  • ConfirmGenerationRequest 增加 custom_title 字段
  • mark_confirmed 时更新 title_config.text
  • 回写 EditPlan.config 中的 title

3. domain层

  • GenerationTask.mark_confirmed 增加 title_config 参数

Worker确认

  • _sync_task_config_to_plan 已正确处理 voice_library_id 非空的情况(第520行),无需修改

测试

  • 8个回归测试全部通过
  • 144个相关测试全部通过
  • 不影响现有逻辑
## 改动 ### 1. create端点兜底复用预览产物 前端刷新页面后 previewTaskId 丢失,降级调 create 接口时,如果同一 edit_plan 有已完成的预览任务,直接复用(秒出),不创建新任务、不入队。 - 查询条件:source_edit_plan_id + is_preview=True + status=completed + 当前用户 - 分辨率一致性校验(与 confirm 端点相同逻辑) - 仅对 is_preview=False 的正式生成请求生效 ### 2. confirm端点同步标题 - ConfirmGenerationRequest 增加 custom_title 字段 - mark_confirmed 时更新 title_config.text - 回写 EditPlan.config 中的 title ### 3. domain层 - GenerationTask.mark_confirmed 增加 title_config 参数 ### Worker确认 - `_sync_task_config_to_plan` 已正确处理 voice_library_id 非空的情况(第520行),无需修改 ## 测试 - 8个回归测试全部通过 - 144个相关测试全部通过 - 不影响现有逻辑

🚀 预览环境已部署

项目 详情
PR号 #1486
预览链接 https://pr-1486.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1486 | | 预览链接 | [https://pr-1486.preview.xiaoxiajianji.com](https://pr-1486.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-08-24 22:50:30 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-24 22:50:30 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-08-24 23:15:24 +08:00
feat: create端点兜底复用预览产物 + confirm同步标题
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 39s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 37s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m41s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m56s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m19s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m27s
AI Code Review / AI Code Review (pull_request) Failing after 2m30s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m51s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m51s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
96bf8207de
- create_generation_task: source_edit_plan_id非空且is_preview=False时,
  查询该plan下已完成的预览任务,分辨率一致则直接mark_confirmed返回(秒出),
  不创建新任务、不入队
- confirm_generation: ConfirmGenerationRequest增加custom_title字段,
  mark_confirmed时同步更新title_config,并回写EditPlan.config
- GenerationTask.mark_confirmed: 增加title_config参数
- 8个回归测试覆盖兜底复用/分辨率不匹配/预览请求跳过/标题同步
xiaoxia force-pushed feat/create-endpoint-reuse-preview from 40bd15e159 to 96bf8207de 2026-08-24 23:15:24 +08:00 Compare
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:是
  • 阻塞级问题数量:1 个

📊 审查概览

  • 整体评价:需修改
  • 建议级问题数量:2 个

🔴 阻塞级问题(必须修复)

  1. [apps/api/app/api/routes/generation_tasks.py: 377] 裸异常捕获掩盖潜在错误
    • 问题类型:逻辑bug / 异常处理不当
    • 问题描述:代码使用了 except Exception 捕获所有异常。虽然这是为了"兜底"逻辑不影响主流程,但这样会掩盖掉代码中可能存在的 NameErrorAttributeError 等编程错误,或者数据库连接层面的严重问题。如果兜底逻辑本身写错(例如变量名拼写错误),系统将静默失败,导致本该复用的预览无法复用,且难以排查原因。
    • 修改建议:应当捕获具体的异常类型,例如 except (SQLAlchemyError, AttributeError):,或者至少在 except 块中记录更详细的错误上下文,并在开发环境抛出异常。

💡 改进建议(不阻塞合并)

  1. [apps/api/app/api/routes/generation_tasks.py: 299-311] 路由层直接查询数据库模型

    • 具体内容:在 API 路由层直接导入并使用 GenerationTaskModel 进行数据库查询,违反了分层架构与依赖倒置原则(Repository 模式)。虽然作为性能优化的特殊手段可以接受,但增加了代码耦合度。建议将查询逻辑封装在 generation_task_repository 或专门的 QueryService 中。
  2. [apps/api/app/api/routes/generation_tasks.py: 328] 潜在的 Schema 字段缺失风险

    • 具体内容:代码中使用了 request.title_config,但在 schemas/generation_task.py 的 diff 中仅看到了 ConfirmGenerationRequest 的变更,未看到 CreateGenerationTaskRequest 增加 title_config 字段。请确认 CreateGenerationTaskRequest 的 schema 定义中已包含该字段,否则运行时会报 AttributeError

良好实践

  • confirm_generationcreate_generation_task 的兜底逻辑中,正确处理了 title_configNone 或空字典的情况,使用了 dict(obj or {}) 确保数据安全。
  • create_generation_task 的兜底逻辑中,增加了 created_by_user_id 的校验,防止用户越权复用他人的预览任务,安全性考虑到位。
  • 单元测试覆盖全面,包含了分辨率不匹配、预览不存在、正常复用等多种场景。

格式检查通过 | 逻辑审查需修改 | 性能良好


🤖 由 AI 代码审查机器人自动生成 | 2026-08-24 15:17:55 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:是 - 阻塞级问题数量:1 个 ### 📊 审查概览 - 整体评价:需修改 - 建议级问题数量:2 个 ### 🔴 阻塞级问题(必须修复) 1. **[apps/api/app/api/routes/generation_tasks.py: 377] 裸异常捕获掩盖潜在错误** - 问题类型:逻辑bug / 异常处理不当 - 问题描述:代码使用了 `except Exception` 捕获所有异常。虽然这是为了"兜底"逻辑不影响主流程,但这样会掩盖掉代码中可能存在的 `NameError`、`AttributeError` 等编程错误,或者数据库连接层面的严重问题。如果兜底逻辑本身写错(例如变量名拼写错误),系统将静默失败,导致本该复用的预览无法复用,且难以排查原因。 - 修改建议:应当捕获具体的异常类型,例如 `except (SQLAlchemyError, AttributeError):`,或者至少在 except 块中记录更详细的错误上下文,并在开发环境抛出异常。 ### 💡 改进建议(不阻塞合并) 1. **[apps/api/app/api/routes/generation_tasks.py: 299-311] 路由层直接查询数据库模型** - 具体内容:在 API 路由层直接导入并使用 `GenerationTaskModel` 进行数据库查询,违反了分层架构与依赖倒置原则(Repository 模式)。虽然作为性能优化的特殊手段可以接受,但增加了代码耦合度。建议将查询逻辑封装在 `generation_task_repository` 或专门的 `QueryService` 中。 2. **[apps/api/app/api/routes/generation_tasks.py: 328] 潜在的 Schema 字段缺失风险** - 具体内容:代码中使用了 `request.title_config`,但在 `schemas/generation_task.py` 的 diff 中仅看到了 `ConfirmGenerationRequest` 的变更,未看到 `CreateGenerationTaskRequest` 增加 `title_config` 字段。请确认 `CreateGenerationTaskRequest` 的 schema 定义中已包含该字段,否则运行时会报 `AttributeError`。 ### ✅ 良好实践 - 在 `confirm_generation` 和 `create_generation_task` 的兜底逻辑中,正确处理了 `title_config` 为 `None` 或空字典的情况,使用了 `dict(obj or {})` 确保数据安全。 - 在 `create_generation_task` 的兜底逻辑中,增加了 `created_by_user_id` 的校验,防止用户越权复用他人的预览任务,安全性考虑到位。 - 单元测试覆盖全面,包含了分辨率不匹配、预览不存在、正常复用等多种场景。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-24 15:17:55 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot added 1 commit 2026-08-24 23:20:16 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 50s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 26s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m56s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m7s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m12s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m18s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m45s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m43s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 6m40s
AI Code Review / AI Code Review (pull_request) Successful in 6m51s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 8m53s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m8s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 43s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 55s
8f20de3c53
auto-approve-bot merged commit 7844b65afe into develop 2026-08-24 23:31:00 +08:00
auto-approve-bot deleted branch feat/create-endpoint-reuse-preview 2026-08-24 23:31:01 +08:00

🗑️ 预览环境已清理

PR #1486 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1486 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.