fix: thumbnail_url未写入generated_videos + 缩略图key避免覆盖 #1528

Merged
xiaoxia merged 3 commits from fix/thumbnail-v2 into develop 2026-08-28 16:06:27 +08:00
Owner

Bug 1: thumbnail_url 未写入 generated_videos 表

render_adapter 渲染完成后 thumbnail_url 通过 RenderAdapterResult 返回,但 generation.py 链路未传递给 create_video_record_and_dedup,导致前端拿不到封面。

修复:_render_from_edit_plan 补充返回 thumbnail_url → _upload_and_record 新增参数透传 → create_video_record_and_dedup 写入 DB

Bug 2: 缩略图存储 key 冲突

原 key rendered/{plan_id}/thumbnail.jpg 导致同 plan 多次渲染互相覆盖。
改为 rendered/{plan_id}/thumbnails/{task_id}.jpg

## Bug 1: thumbnail_url 未写入 generated_videos 表 render_adapter 渲染完成后 thumbnail_url 通过 RenderAdapterResult 返回,但 generation.py 链路未传递给 create_video_record_and_dedup,导致前端拿不到封面。 修复:_render_from_edit_plan 补充返回 thumbnail_url → _upload_and_record 新增参数透传 → create_video_record_and_dedup 写入 DB ## Bug 2: 缩略图存储 key 冲突 原 key rendered/{plan_id}/thumbnail.jpg 导致同 plan 多次渲染互相覆盖。 改为 rendered/{plan_id}/thumbnails/{task_id}.jpg
xiaoxia added 1 commit 2026-08-28 15:30:37 +08:00
fix: thumbnail_url未写入generated_videos表 + 缩略图存储key避免覆盖
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API 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 / Check if frontend-only change (pull_request) Successful in 3m37s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m18s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m43s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m43s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m46s
AI Code Review / AI Code Review (pull_request) Failing after 4m51s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m42s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m5s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 6m56s
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
5a9e3fdb5e
Bug 1: render_adapter渲染完成后thumbnail_url未传递给create_video_record_and_dedup
- _render_from_edit_plan 补充返回 result.thumbnail_url
- _upload_and_record 新增 thumbnail_url 参数并透传
- generate_video 调用处同步更新

Bug 2: 缩略图存储key rendered/{plan_id}/thumbnail.jpg 导致同plan多次渲染互相覆盖
- 改为 rendered/{plan_id}/thumbnails/{task_id}.jpg

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1528 | | 预览链接 | [https://pr-1528.preview.xiaoxiajianji.com](https://pr-1528.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot added 1 commit 2026-08-28 15:37:59 +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 API Integration Tests (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 / Check if frontend-only change (pull_request) Successful in 2m38s
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
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m29s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m34s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m32s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m44s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m27s
AI Code Review / AI Code Review (pull_request) Failing after 4m35s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m53s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m55s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 5m42s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 8m25s
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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
87deb7e467
xiaoxia added 1 commit 2026-08-28 15:47:30 +08:00
fix: AI Code Review 澄清注释 - job_id是方法参数 + thumbnail_url通过构造函数返回
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API 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 2m29s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m15s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m45s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m49s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m21s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m24s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m38s
AI Code Review / AI Code Review (pull_request) Successful in 4m57s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m39s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 8m20s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 5m50s
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 / Canary Release to Production (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 / Integration Tests (pull_request) Successful in 4m0s
CI/CD Pipeline / CI Gate (pull_request) Successful in 27s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m21s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 4m34s
1b19e17cb7
Collaborator

代码审查结果 - PR #1528

⚠️ 问题(1个需要修改)

  1. apps/worker/video_processing/render_adapter.py 第581-586行:数据流不一致风险,可能导致运行时 AttributeError
    • 问题描述:在 render_adapter.py 中,thumbnail_url 被赋值为局部变量,但在 generation.py(第585行)中代码尝试通过 result.thumbnail_url 访问该属性。如果 RenderAdapter 的内部逻辑没有将局部变量 thumbnail_url 赋值给返回对象 result(Diff 中未体现此赋值),则 generation.py 在访问该属性时会抛出异常。
    • 后果:导致视频生成流程在最后阶段崩溃,任务失败。
    • 修改建议:请确认 RenderAdapter 的返回对象 result 是否包含 thumbnail_url 属性。如果没有,需要在 render_adapter.py 中添加 result.thumbnail_url = thumbnail_url 或类似的逻辑,确保数据能正确传递给调用方。

💡 建议(1个可选)

  1. apps/worker/video_processing/render_adapter.py 第583行:建议对 job_id 进行路径安全校验。
    • 具体内容thumb_storage_key 直接使用了 job_id 拼接路径。虽然 job_id 通常由系统生成,但如果该参数可能受外部影响或包含特殊字符(如 ../),可能会导致对象存储路径异常。建议对 job_id 进行格式校验或清洗,确保只包含安全字符(如字母数字和短横线)。

格式检查通过 | 逻辑审查需修改 | 性能无明显问题


🤖 由 AI 代码审查机器人自动生成 | 2026-08-28 07:52:27 | 模型:

## 代码审查结果 - PR #1528 ### ⚠️ 问题(1个需要修改) 1. **apps/worker/video_processing/render_adapter.py 第581-586行**:数据流不一致风险,可能导致运行时 `AttributeError`。 - **问题描述**:在 `render_adapter.py` 中,`thumbnail_url` 被赋值为局部变量,但在 `generation.py`(第585行)中代码尝试通过 `result.thumbnail_url` 访问该属性。如果 `RenderAdapter` 的内部逻辑没有将局部变量 `thumbnail_url` 赋值给返回对象 `result`(Diff 中未体现此赋值),则 `generation.py` 在访问该属性时会抛出异常。 - **后果**:导致视频生成流程在最后阶段崩溃,任务失败。 - **修改建议**:请确认 `RenderAdapter` 的返回对象 `result` 是否包含 `thumbnail_url` 属性。如果没有,需要在 `render_adapter.py` 中添加 `result.thumbnail_url = thumbnail_url` 或类似的逻辑,确保数据能正确传递给调用方。 ### 💡 建议(1个可选) 1. **apps/worker/video_processing/render_adapter.py 第583行**:建议对 `job_id` 进行路径安全校验。 - **具体内容**:`thumb_storage_key` 直接使用了 `job_id` 拼接路径。虽然 `job_id` 通常由系统生成,但如果该参数可能受外部影响或包含特殊字符(如 `../`),可能会导致对象存储路径异常。建议对 `job_id` 进行格式校验或清洗,确保只包含安全字符(如字母数字和短横线)。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-28 07:52:27 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia scheduled this pull request to auto merge when all checks succeed 2026-08-28 16:06:25 +08:00
xiaoxia merged commit 79074370b6 into develop 2026-08-28 16:06:27 +08:00

🗑️ 预览环境已清理

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

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

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