feat(assets): 素材库页面加载时自动创建默认 video 库 #1626

Merged
auto-approve-bot merged 1 commits from feat/auto-create-video-library into develop 2026-09-02 15:00:35 +08:00
Owner

问题

新用户首次进入素材库页面时,如果项目下没有 video 类型的素材库,前端只展示空列表,用户无法上传视频。

修复

useAssetsData.ts 的库列表查询 queryFn 中,拉取库列表后检查是否存在 video 类型的库。如果不存在,自动调用 ensureDefaultLibrary({ project_id, kind: "video" }) 创建默认视频素材库,然后重新拉取最新列表。

useVoiceMaterials.ts 中 voice 类型的自动创建逻辑保持一致。

改动

  • apps/web/src/pages/assets/hooks/useAssetsData.ts:queryFn 增加自动创建 video 库的逻辑
## 问题 新用户首次进入素材库页面时,如果项目下没有 video 类型的素材库,前端只展示空列表,用户无法上传视频。 ## 修复 在 `useAssetsData.ts` 的库列表查询 `queryFn` 中,拉取库列表后检查是否存在 video 类型的库。如果不存在,自动调用 `ensureDefaultLibrary({ project_id, kind: "video" })` 创建默认视频素材库,然后重新拉取最新列表。 与 `useVoiceMaterials.ts` 中 voice 类型的自动创建逻辑保持一致。 ## 改动 - `apps/web/src/pages/assets/hooks/useAssetsData.ts`:queryFn 增加自动创建 video 库的逻辑
xiaoxia added 1 commit 2026-09-02 14:38:19 +08:00
feat(assets): auto-create default video library when none exists
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API 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 / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped 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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m27s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 4m33s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 4m49s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m52s
AI Code Review / AI Code Review (pull_request) Successful in 5m37s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 5m42s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 5m44s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m51s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 5m51s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 11m13s
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 / CI Gate (pull_request) Successful in 1s
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
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 4m20s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m33s
e851cea12a
When users first visit the asset library page and no video-type
library exists, automatically call ensureDefaultLibrary to create
one — mirroring the existing pattern in useVoiceMaterials.

This fixes the production 404 issue where new projects had no
video library, causing upload API calls to fail.

🚀 预览环境已部署

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

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

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

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

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

代码审查结果 - PR #1626

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

  1. useAssetsData.ts 第21-28行:在 queryFn 中执行副作用(创建数据),违反了 React Query 的设计原则,存在严重的数据损坏和竞态条件风险。
    • 原因:Query 函数应当是幂等的只读操作。将 ensureDefaultLibrary(写操作)放在此处,意味着每次组件挂载或缓存失效时都可能触发创建请求。
    • 后果:在并发场景(如快速刷新、多组件同时渲染)下,可能触发多个并发请求,导致创建多个默认库(脏数据)或接口报错。
  2. useAssetsData.ts 第27行:创建资源后立即重新拉取列表,存在数据一致性(最终一致性)隐患。
    • 原因ensureDefaultLibrary 返回后立即调用 getAssetLibraries,假设后端数据库是强一致性的。
    • 后果:如果后端存在主从延迟或异步处理,第二次拉取可能无法获取到刚创建的库,导致 UI 显示状态不正确(仍显示为空)。

💡 建议(1个可选)

  1. useAssetsData.ts 第21-28行:性能优化建议。当前逻辑在缺失库时串行执行了 3 个网络请求(Get -> Create Project -> Create Lib -> Get),耗时较长。建议将创建逻辑移至应用初始化层或单独的 Mutation 中处理,或者确保 ensureDefaultLibrary 接口直接返回创建后的库对象,避免二次请求。

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-09-02 06:43:56 | 模型:

## 代码审查结果 - PR #1626 ### ⚠️ 问题(2个需要修改) 1. **useAssetsData.ts 第21-28行**:在 `queryFn` 中执行副作用(创建数据),违反了 React Query 的设计原则,存在严重的数据损坏和竞态条件风险。 - **原因**:Query 函数应当是幂等的只读操作。将 `ensureDefaultLibrary`(写操作)放在此处,意味着每次组件挂载或缓存失效时都可能触发创建请求。 - **后果**:在并发场景(如快速刷新、多组件同时渲染)下,可能触发多个并发请求,导致创建多个默认库(脏数据)或接口报错。 2. **useAssetsData.ts 第27行**:创建资源后立即重新拉取列表,存在数据一致性(最终一致性)隐患。 - **原因**:`ensureDefaultLibrary` 返回后立即调用 `getAssetLibraries`,假设后端数据库是强一致性的。 - **后果**:如果后端存在主从延迟或异步处理,第二次拉取可能无法获取到刚创建的库,导致 UI 显示状态不正确(仍显示为空)。 ### 💡 建议(1个可选) 1. **useAssetsData.ts 第21-28行**:性能优化建议。当前逻辑在缺失库时串行执行了 3 个网络请求(Get -> Create Project -> Create Lib -> Get),耗时较长。建议将创建逻辑移至应用初始化层或单独的 Mutation 中处理,或者确保 `ensureDefaultLibrary` 接口直接返回创建后的库对象,避免二次请求。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-09-02 06:43:56 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-09-02 14:44:10 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-09-02 14:44:11 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit 5fb9975913 into develop 2026-09-02 15:00:35 +08:00
auto-approve-bot deleted branch feat/auto-create-video-library 2026-09-02 15:00:35 +08:00

🗑️ 预览环境已清理

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

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

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