fix(P1): 素材列表status默认过滤 + page/page_size分页支持 #532

Merged
auto-approve-bot merged 2 commits from fix/p1-asset-list-status-and-pagination into develop 2026-07-18 18:47:38 +08:00
Owner

改动内容

  1. status默认过滤:列表接口默认仅返回 status=ready 的素材,自动排除 deleted/uploading/processing/error

    • 支持逗号分隔多状态筛选:?status=ready,uploading
    • status=all 返回所有状态(含 deleted)
  2. page/page_size分页支持:新增 page + page_size 参数,优先于原有的 skip/limit

    • page 从1开始
    • 原有 skip/limit 继续兼容
  3. repository层增强find_by_project / find_by_library / find_by_library_and_file_type / count_by_project / count_by_project_ids 统一增加 status 过滤参数

修复的问题

  • 素材列表默认显示已删除(deleted)的素材
  • 前端传 page/page_size 分页参数无效
  • status 参数过滤不生效
## 改动内容 1. **status默认过滤**:列表接口默认仅返回 `status=ready` 的素材,自动排除 deleted/uploading/processing/error - 支持逗号分隔多状态筛选:`?status=ready,uploading` - 传 `status=all` 返回所有状态(含 deleted) 2. **page/page_size分页支持**:新增 `page` + `page_size` 参数,优先于原有的 `skip/limit` - `page` 从1开始 - 原有 skip/limit 继续兼容 3. **repository层增强**:`find_by_project` / `find_by_library` / `find_by_library_and_file_type` / `count_by_project` / `count_by_project_ids` 统一增加 `status` 过滤参数 ## 修复的问题 - 素材列表默认显示已删除(deleted)的素材 - 前端传 page/page_size 分页参数无效 - status 参数过滤不生效
xiaoxia added the bugbackendP1 labels 2026-07-18 18:30:07 +08:00
auto-approve-bot approved these changes 2026-07-18 18:32:47 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-18 18:32:47 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 2 commits 2026-07-18 18:42:55 +08:00
- status参数默认仅返回ready,自动排除deleted
- 支持逗号分隔多状态筛选,传all返回所有状态
- 新增page/page_size分页参数,优先于skip/limit
- repository层find/count统一增加status过滤参数
fix(test): 集成测试StubAssetRepository增加status参数+素材默认ready
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (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) Successful in 59s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m1s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 16s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m46s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 3m13s
AI Code Review / AI Code Review (pull_request) Successful in 4m36s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m28s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 4m43s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 6s
24f3726314
- StubAssetRepository的find/count方法增加status可选参数
- 列表测试创建的素材改为status=ready,匹配默认过滤规则
- 补充按created_at倒序排序,与真实实现行为一致
xiaoxia force-pushed fix/p1-asset-list-status-and-pagination from 927f216be4 to 24f3726314 2026-07-18 18:42:55 +08:00 Compare

🚀 预览环境已部署

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

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

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

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

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

代码审查结果 - PR #532

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

  1. apps/api/app/api/routes/assets.py 第197行:分页总数计算错误,total = len(items) 计算的是当前页返回的数据量,而非符合条件的总记录数。这会导致前端分页组件显示错误的页数(例如总条数等于每页条数)。
  2. apps/api/app/api/routes/assets.py 第202行total 统计范围与 items 数据范围不一致。items 是通过 find_by_library 获取的(仅包含指定素材库的数据),而 total 是通过 count_by_project 获取的(包含整个项目的所有素材库数据)。这会导致返回的总数远大于实际列表数据量。
  3. apps/api/app/api/routes/assets.py 第216行:数据截断风险。在按 kind(文件类型)筛选时,调用 find_by_project 未指定 limit,使用了默认值 100。如果匹配 kind 的素材位于前 100 条数据之后,将导致查询结果为空,造成严重的数据丢失。

💡 建议(2个可选)

  1. 架构设计:建议在 AssetRepository 接口中增加 count_by_librarycount_by_library_and_file_type 方法,以便准确获取特定条件下的总数,解决上述分页统计问题。
  2. 性能优化:建议将 kind (file_type) 的过滤逻辑下沉到数据库层(SQLAlchemy),避免在 Python 内存中加载大量数据进行过滤(尤其是当前存在 limit 限制导致数据不全的问题)。

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 18:47:34 | 模型:

## 代码审查结果 - PR #532 ### ⚠️ 问题(3个需要修改) 1. **apps/api/app/api/routes/assets.py 第197行**:分页总数计算错误,`total = len(items)` 计算的是当前页返回的数据量,而非符合条件的总记录数。这会导致前端分页组件显示错误的页数(例如总条数等于每页条数)。 2. **apps/api/app/api/routes/assets.py 第202行**:`total` 统计范围与 `items` 数据范围不一致。`items` 是通过 `find_by_library` 获取的(仅包含指定素材库的数据),而 `total` 是通过 `count_by_project` 获取的(包含整个项目的所有素材库数据)。这会导致返回的总数远大于实际列表数据量。 3. **apps/api/app/api/routes/assets.py 第216行**:数据截断风险。在按 `kind`(文件类型)筛选时,调用 `find_by_project` 未指定 `limit`,使用了默认值 100。如果匹配 `kind` 的素材位于前 100 条数据之后,将导致查询结果为空,造成严重的数据丢失。 ### 💡 建议(2个可选) 1. **架构设计**:建议在 `AssetRepository` 接口中增加 `count_by_library` 和 `count_by_library_and_file_type` 方法,以便准确获取特定条件下的总数,解决上述分页统计问题。 2. **性能优化**:建议将 `kind` (file_type) 的过滤逻辑下沉到数据库层(SQLAlchemy),避免在 Python 内存中加载大量数据进行过滤(尤其是当前存在 limit 限制导致数据不全的问题)。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 18:47:34 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot merged commit 12c48e4fd1 into develop 2026-07-18 18:47:38 +08:00
auto-approve-bot deleted branch fix/p1-asset-list-status-and-pagination 2026-07-18 18:47:39 +08:00

🗑️ 预览环境已清理

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

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

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