fix: 确认生成兜底增强 — project_id 为空时通过 user_id 查找素材 #1338

Merged
xiaoxia merged 4 commits from fix/generate-fallback-user-assets into develop 2026-08-10 21:32:15 +08:00
Owner

问题

模板编辑器直接创建的草稿 plan 没有 project_idconfig.asset_ids,导致:

  • _auto_fallback_auto_material_mode 因 project_id 为空直接 return
  • can_generate 发现 clips 都无 asset_id,报错"没有可渲染的就绪片段"

修复

  • asset_repository 新增 find_ready_videos_by_user(user_id) 方法
  • _auto_fallback_auto_material_mode 增加策略2:project_id 为空时通过 uploaded_by_user_id 查找用户上传的就绪视频
  • generation.py 传递 current_user.user.id 给兜底函数

影响文件

  • packages/adapters/sqlalchemy_impl/asset_repository.py
  • apps/api/app/api/routes/templates_editor/_fallback.py
  • apps/api/app/api/routes/templates_editor/generation.py
## 问题 模板编辑器直接创建的草稿 plan 没有 `project_id` 和 `config.asset_ids`,导致: - `_auto_fallback_auto_material_mode` 因 project_id 为空直接 return - `can_generate` 发现 clips 都无 asset_id,报错"没有可渲染的就绪片段" ## 修复 - `asset_repository` 新增 `find_ready_videos_by_user(user_id)` 方法 - `_auto_fallback_auto_material_mode` 增加策略2:project_id 为空时通过 `uploaded_by_user_id` 查找用户上传的就绪视频 - `generation.py` 传递 `current_user.user.id` 给兜底函数 ## 影响文件 - `packages/adapters/sqlalchemy_impl/asset_repository.py` - `apps/api/app/api/routes/templates_editor/_fallback.py` - `apps/api/app/api/routes/templates_editor/generation.py`
xiaoxia added 1 commit 2026-08-10 20:19:28 +08:00
fix: 确认生成兜底增强 — project_id 为空时通过 user_id 查找素材
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
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 / 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 21s
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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m27s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m51s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m53s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m59s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m15s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m17s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m24s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 3m29s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 6m8s
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
AI Code Review / AI Code Review (pull_request) Successful in 6m43s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m31s
CI/CD Pipeline / CI Gate (pull_request) Failing after 8s
e09fdda74c
根因:模板编辑器直接创建的草稿 plan 没有 project_id 和 config.asset_ids,
导致 _auto_fallback_auto_material_mode 跳过素材分配,
can_generate 报 "没有可渲染的就绪片段"。

修复:
- asset_repository 新增 find_ready_videos_by_user 方法
- _auto_fallback_auto_material_mode 增加策略2:project_id 为空时
  通过 uploaded_by_user_id 查找用户上传的就绪视频
- generation.py 传递 current_user.user.id 给兜底函数

🚀 预览环境已部署

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

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

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

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

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

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-08-10 21:17:40 +08:00
test: 补充 PR #1338 兜底增强单测 (find_ready_videos_by_user + user_id 策略2)
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 22s
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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m20s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m46s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m49s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m58s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m28s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m27s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m59s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m42s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 4m45s
AI Code Review / AI Code Review (pull_request) Has been cancelled
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) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
c528bc50d3
auto-approve-bot added 1 commit 2026-08-10 21:22:25 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
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 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 31s
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 / Validate - Migration (alembic) (pull_request) Successful in 1m31s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m37s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m51s
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 / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (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
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
fabb880ceb
xiaoxia added 1 commit 2026-08-10 21:24:20 +08:00
style: black + isort 格式化修复
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 36s
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 / Validate - Migration (alembic) (pull_request) Successful in 1m6s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m6s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m28s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m44s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m24s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m50s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m50s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m32s
AI Code Review / AI Code Review (pull_request) Successful in 4m42s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m9s
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) Successful in 1m55s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 47s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m0s
8d260f16f2
Collaborator

【阻塞级判定】

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

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:1 个

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

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

  1. [apps/api/app/api/routes/templates_editor/generation.py:79] current_user 属性访问确认
    • 具体内容:代码中使用了 current_user.user.id。请确认 current_user 依赖注入返回的对象结构。在标准的 FastAPI get_current_user 依赖中通常直接返回 User 对象,即 current_user.id。如果 current_user 是一个包含 user 属性的包装类(如 TokenData 或自定义 AuthContext),则当前代码是正确的。建议确认该属性路径是否与项目其他路由保持一致。

良好实践

  1. 防御性编程:在调用 asset_repo.find_ready_videos_by_user 前使用了 hasattr 检查,增强了代码对不同 Repository 实现的兼容性。
  2. 日志脱敏:在日志中输出 user_id 时使用了切片 [:8] + "...",有效避免了敏感信息(完整用户ID)在日志中泄露。
  3. 测试覆盖充分:新增的单元测试覆盖了策略优先级、空列表、边界条件等场景,确保了兜底逻辑的可靠性。
  4. 代码重构:将素材分配的循环逻辑提取到策略判断之外,消除了代码重复,逻辑更加清晰。

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


🤖 由 AI 代码审查机器人自动生成 | 2026-08-10 13:29:04 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:1 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[apps/api/app/api/routes/templates_editor/generation.py:79] current_user 属性访问确认** - 具体内容:代码中使用了 `current_user.user.id`。请确认 `current_user` 依赖注入返回的对象结构。在标准的 FastAPI `get_current_user` 依赖中通常直接返回 User 对象,即 `current_user.id`。如果 `current_user` 是一个包含 `user` 属性的包装类(如 `TokenData` 或自定义 `AuthContext`),则当前代码是正确的。建议确认该属性路径是否与项目其他路由保持一致。 ### ✅ 良好实践 1. **防御性编程**:在调用 `asset_repo.find_ready_videos_by_user` 前使用了 `hasattr` 检查,增强了代码对不同 Repository 实现的兼容性。 2. **日志脱敏**:在日志中输出 `user_id` 时使用了切片 `[:8] + "..."`,有效避免了敏感信息(完整用户ID)在日志中泄露。 3. **测试覆盖充分**:新增的单元测试覆盖了策略优先级、空列表、边界条件等场景,确保了兜底逻辑的可靠性。 4. **代码重构**:将素材分配的循环逻辑提取到策略判断之外,消除了代码重复,逻辑更加清晰。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-10 13:29:04 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit aff62b29fc into develop 2026-08-10 21:32:15 +08:00

🗑️ 预览环境已清理

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

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

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