refactor(api): 拆分 tasks.ts 为目录结构(types/tasks/index) #950

Closed
xiaoxia wants to merge 2 commits from refactor/tasks-api into develop
Owner

变更说明

将 123 行的 tasks.ts 拆分为目录化结构,保持导入路径向后兼容。

拆分结构

api/tasks/
├── types.ts   # 类型定义(TaskItem/TaskStatus/创建请求响应等)
├── tasks.ts   # 全部 5 个 API 函数
└── index.ts   # 统一入口 re-export

变更统计

  • 旧文件:tasks.ts 123 行 → 删除
  • 新入口:index.ts ~25 行
  • 新增文件:3 个
  • 导入路径 @/api/tasks 保持不变,向后兼容

影响范围

无业务逻辑变更,纯文件结构调整。

## 变更说明 将 123 行的 tasks.ts 拆分为目录化结构,保持导入路径向后兼容。 ## 拆分结构 ``` api/tasks/ ├── types.ts # 类型定义(TaskItem/TaskStatus/创建请求响应等) ├── tasks.ts # 全部 5 个 API 函数 └── index.ts # 统一入口 re-export ``` ## 变更统计 - 旧文件:tasks.ts 123 行 → 删除 - 新入口:index.ts ~25 行 - 新增文件:3 个 - 导入路径 `@/api/tasks` 保持不变,向后兼容 ## 影响范围 无业务逻辑变更,纯文件结构调整。
xiaoxia added 1 commit 2026-07-26 17:13:07 +08:00
refactor(api): 拆分 tasks.ts 为目录结构(types/tasks/index)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 28s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 33s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m6s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m11s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 29s
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 / Validate - Code Quality (pull_request) Failing after 2m26s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m13s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47s
AI Code Review / AI Code Review (pull_request) Successful in 1m38s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 29s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 2m25s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m45s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
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 Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 20s
CI/CD Pipeline / Deploy Production (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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
f31408baee
将 123 行的 tasks.ts 拆分为目录化结构:
- types.ts: 类型定义(TaskItem/TaskStatus/创建请求响应等)
- tasks.ts: 全部 5 个 API 函数
- index.ts: 统一入口 re-export,保持 @/api/tasks 路径向后兼容
xiaoxia added 1 commit 2026-07-27 12:34:55 +08:00
Merge branch 'develop' into refactor/tasks-api
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 39s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m7s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m55s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 57s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 42s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 38s
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 / PR Build Web Image (pull_request) Successful in 1m41s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 52s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m37s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 47s
AI Code Review / AI Code Review (pull_request) Successful in 2m5s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 15m23s
CI/CD Pipeline / CI Gate (pull_request) 失败: CI/CD Pipeline / Validate - Code Quality (pull_request) [frontend-only]
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
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 / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 19s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Deploy Production (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 / Canary Release to Production (pull_request) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 18s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
8ce48c1b02
auto-approve-bot approved these changes 2026-07-27 14:13:44 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。

🚀 预览环境已部署

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

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

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

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

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

📊 审查概览

  • 整体评价:需修改
  • 严重问题数量:1 个
  • 一般建议数量:2 个

需修改的问题(严重)

  1. [apps/web/src/api/tasks/tasks.ts: 36, 41, 45] 缺少泛型类型参数导致类型不安全
    • 问题描述:在 getUserTasksgetTaskretryTask 函数中,调用 apiClient.getapiClient.post 时未指定泛型类型参数(与 createGenerationTaskgetTasks 做法不一致)。这将导致解构出的 data 被推断为 any 类型,从而破坏了 TypeScript 的类型安全检查,无法在编译期发现后端返回数据结构不符的问题。
    • 修改建议:为 apiClient 调用添加明确的泛型类型。
      • getUserTasks: apiClient.get<{ items?: TaskItem[] } & TaskItem[]>("/tasks")
      • getTask: apiClient.get<TaskItem>(\/tasks/${taskId}`)`
      • retryTask: apiClient.post<TaskItem>(\/tasks/${taskId}/retry`)`

💡 改进建议(一般)

  1. [apps/web/src/api/tasks/tasks.ts: 41, 45] 缺少入参校验

    • 具体内容:getTaskretryTask 函数依赖 taskId 参数,但目前仅依靠 TypeScript 类型约束。如果运行时传入空字符串,会导致请求发送到错误的端点(如 /tasks/)。建议在函数开头添加参数校验,例如 if (!taskId) throw new Error("taskId is required")
  2. [apps/web/src/api/tasks/tasks.ts: 36] 接口响应结构处理过于宽松

    • 具体内容:getUserTasks 函数中使用了 data.items || data || [] 进行兼容处理。这种防御性编程虽然能避免崩溃,但掩盖了 API 契约不一致的问题(后端有时返回对象有时返回数组)。建议确认后端统一返回格式,或使用适配器模式明确处理两种不同的响应结构,以提高代码可维护性。

良好实践

  • 模块化重构:将原本混杂在一起的类型定义和 API 逻辑拆分为 types.tstasks.tsindex.ts,符合关注点分离原则,便于维护。
  • 类型导出index.ts 统一管理导出,保持了对外接口的向后兼容性,降低了重构成本。
  • 代码整洁度:移除了冗余的注释,保留了必要的文档说明,代码结构清晰。

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 06:14:55 | 模型:

### 📊 审查概览 - 整体评价:需修改 - 严重问题数量:1 个 - 一般建议数量:2 个 ### ❌ 需修改的问题(严重) 1. **[apps/web/src/api/tasks/tasks.ts: 36, 41, 45] 缺少泛型类型参数导致类型不安全** - 问题描述:在 `getUserTasks`、`getTask` 和 `retryTask` 函数中,调用 `apiClient.get` 或 `apiClient.post` 时未指定泛型类型参数(与 `createGenerationTask` 和 `getTasks` 做法不一致)。这将导致解构出的 `data` 被推断为 `any` 类型,从而破坏了 TypeScript 的类型安全检查,无法在编译期发现后端返回数据结构不符的问题。 - 修改建议:为 `apiClient` 调用添加明确的泛型类型。 - `getUserTasks`: `apiClient.get<{ items?: TaskItem[] } & TaskItem[]>("/tasks")` - `getTask`: `apiClient.get<TaskItem>(\`/tasks/${taskId}\`)` - `retryTask`: `apiClient.post<TaskItem>(\`/tasks/${taskId}/retry\`)` ### 💡 改进建议(一般) 1. **[apps/web/src/api/tasks/tasks.ts: 41, 45] 缺少入参校验** - 具体内容:`getTask` 和 `retryTask` 函数依赖 `taskId` 参数,但目前仅依靠 TypeScript 类型约束。如果运行时传入空字符串,会导致请求发送到错误的端点(如 `/tasks/`)。建议在函数开头添加参数校验,例如 `if (!taskId) throw new Error("taskId is required")`。 2. **[apps/web/src/api/tasks/tasks.ts: 36] 接口响应结构处理过于宽松** - 具体内容:`getUserTasks` 函数中使用了 `data.items || data || []` 进行兼容处理。这种防御性编程虽然能避免崩溃,但掩盖了 API 契约不一致的问题(后端有时返回对象有时返回数组)。建议确认后端统一返回格式,或使用适配器模式明确处理两种不同的响应结构,以提高代码可维护性。 ### ✅ 良好实践 - **模块化重构**:将原本混杂在一起的类型定义和 API 逻辑拆分为 `types.ts`、`tasks.ts` 和 `index.ts`,符合关注点分离原则,便于维护。 - **类型导出**:`index.ts` 统一管理导出,保持了对外接口的向后兼容性,降低了重构成本。 - **代码整洁度**:移除了冗余的注释,保留了必要的文档说明,代码结构清晰。 --- **审查结果**:✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 06:14:55 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
Collaborator

Auto merge skipped after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually. This is not a CI failure.

Auto merge skipped after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually. This is not a CI failure.
xiaoxia closed this pull request 2026-07-27 16:33:14 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #950 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 39s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m7s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m55s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 57s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 42s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 38s
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 / PR Build Web Image (pull_request) Successful in 1m41s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 52s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m37s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 47s
AI Code Review / AI Code Review (pull_request) Successful in 2m5s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 15m23s
CI/CD Pipeline / CI Gate (pull_request) 失败: CI/CD Pipeline / Validate - Code Quality (pull_request) [frontend-only]
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
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 / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 19s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Deploy Production (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 / Canary Release to Production (pull_request) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 18s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.