|
@@ -1,7 +1,7 @@
|
|
|
# Story 010.009: 创建统一文件后端模块
|
|
# Story 010.009: 创建统一文件后端模块
|
|
|
|
|
|
|
|
## Status
|
|
## Status
|
|
|
-Ready for Review
|
|
|
|
|
|
|
+In Progress
|
|
|
|
|
|
|
|
## Story
|
|
## Story
|
|
|
|
|
|
|
@@ -89,6 +89,69 @@ Ready for Review
|
|
|
- [x] **任务10: 代码质量检查**
|
|
- [x] **任务10: 代码质量检查**
|
|
|
- [x] 运行 `pnpm test` 确保所有测试通过 (8/8 通过)
|
|
- [x] 运行 `pnpm test` 确保所有测试通过 (8/8 通过)
|
|
|
|
|
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 补充任务(发现缺失功能后添加)
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务11: 创建文件上传策略路由** (AC: 4)
|
|
|
|
|
+ - [ ] 创建 `src/routes/upload-policy/post.ts`,参考 `file-module` 对应文件
|
|
|
|
|
+ - [ ] 实现 MinIO 上传策略生成(含签名)
|
|
|
|
|
+ - [ ] 使用 `tenantAuthMiddleware` 中间件
|
|
|
|
|
+ - [ ] 定义 Schema 包含 uploadPolicy 响应结构
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务12: 创建分片上传策略路由** (AC: 4)
|
|
|
|
|
+ - [ ] 创建 `src/routes/multipart-policy/post.ts`,参考 `file-module` 对应文件
|
|
|
|
|
+ - [ ] 实现分片上传策略生成
|
|
|
|
|
+ - [ ] 使用 `tenantAuthMiddleware` 中间件
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务13: 创建分片上传完成路由** (AC: 4)
|
|
|
|
|
+ - [ ] 创建 `src/routes/multipart-complete/post.ts`,参考 `file-module` 对应文件
|
|
|
|
|
+ - [ ] 实现分片上传完成逻辑
|
|
|
|
|
+ - [ ] 使用 `tenantAuthMiddleware` 中间件
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务14: 创建获取文件URL路由** (AC: 4)
|
|
|
|
|
+ - [ ] 创建 `src/routes/[id]/get-url.ts`,参考 `file-module` 对应文件
|
|
|
|
|
+ - [ ] 实现 `GET /:id/url` 端点
|
|
|
|
|
+ - [ ] 使用 `tenantAuthMiddleware` 中间件
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务15: 创建文件删除路由** (AC: 4)
|
|
|
|
|
+ - [ ] 创建 `src/routes/[id]/delete.ts`,参考 `file-module` 对应文件
|
|
|
|
|
+ - [ ] 实现 `DELETE /:id` 端点
|
|
|
|
|
+ - [ ] 同时删除 MinIO 文件和数据库记录
|
|
|
|
|
+ - [ ] 使用 `tenantAuthMiddleware` 中间件
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务16: 创建文件下载路由** (AC: 4)
|
|
|
|
|
+ - [ ] 创建 `src/routes/[id]/download.ts`,参考 `file-module` 对应文件
|
|
|
|
|
+ - [ ] 实现 `GET /:id/download` 端点(返回带 Content-Disposition 的 URL)
|
|
|
|
|
+ - [ ] 使用 `tenantAuthMiddleware` 中间件
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务17: 更新路由入口文件** (AC: 4)
|
|
|
|
|
+ - [ ] 更新 `src/routes/index.ts`,聚合所有路由
|
|
|
|
|
+ - [ ] 添加 `createCrudRoutes` 生成基础 CRUD 路由
|
|
|
|
|
+ - [ ] 导出完整的 `unifiedFileRoutes` 路由集合
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务18: 创建测试工具文件**
|
|
|
|
|
+ - [ ] 创建 `tests/utils/integration-test-utils.ts`,参考 `file-module` 对应文件
|
|
|
|
|
+ - [ ] 实现 `IntegrationTestAssertions` 类(expectFileToExist 等方法)
|
|
|
|
|
+ - [ ] 适配 `UnifiedFile` 实体
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务19: 创建测试数据工厂**
|
|
|
|
|
+ - [ ] 创建 `tests/utils/integration-test-db.ts`,参考 `file-module` 对应文件
|
|
|
|
|
+ - [ ] 实现 `TestDataFactory` 类
|
|
|
|
|
+ - [ ] 适配 `UnifiedFile` 实体字段
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务20: 补充集成测试**
|
|
|
|
|
+ - [ ] 为上传策略路由添加集成测试
|
|
|
|
|
+ - [ ] 为分片上传路由添加集成测试
|
|
|
|
|
+ - [ ] 为获取URL路由添加集成测试
|
|
|
|
|
+ - [ ] 为下载路由添加集成测试
|
|
|
|
|
+ - [ ] 为删除路由添加集成测试
|
|
|
|
|
+
|
|
|
|
|
+- [ ] **任务21: 完整回归测试**
|
|
|
|
|
+ - [ ] 运行 `pnpm test` 确保所有测试通过
|
|
|
|
|
+ - [ ] 运行 `pnpm typecheck` 确保无类型错误
|
|
|
|
|
+ - [ ] 更新 File List 列出所有新增文件
|
|
|
|
|
+
|
|
|
## Dev Notes
|
|
## Dev Notes
|
|
|
|
|
|
|
|
### 项目结构信息
|
|
### 项目结构信息
|
|
@@ -138,12 +201,23 @@ packages/unified-file-module/
|
|
|
|
|
|
|
|
### 路由设计规范
|
|
### 路由设计规范
|
|
|
|
|
|
|
|
-**管理员接口** (新增):
|
|
|
|
|
|
|
+**管理员接口** (完整列表):
|
|
|
```
|
|
```
|
|
|
-POST /api/v1/admin/unified-files/upload # 上传文件
|
|
|
|
|
|
|
+# 文件上传策略
|
|
|
|
|
+POST /api/v1/admin/unified-files/upload-policy # 生成MinIO上传策略
|
|
|
|
|
+POST /api/v1/admin/unified-files/multipart-policy # 生成分片上传策略
|
|
|
|
|
+POST /api/v1/admin/unified-files/multipart-complete # 完成分片上传
|
|
|
|
|
+
|
|
|
|
|
+# 文件操作(通过createCrudRoutes自动生成)
|
|
|
GET /api/v1/admin/unified-files # 文件列表
|
|
GET /api/v1/admin/unified-files # 文件列表
|
|
|
|
|
+POST /api/v1/admin/unified-files # 创建文件记录
|
|
|
GET /api/v1/admin/unified-files/:id # 获取文件详情
|
|
GET /api/v1/admin/unified-files/:id # 获取文件详情
|
|
|
-DELETE /api/v1/admin/unified-files/:id # 删除文件
|
|
|
|
|
|
|
+PUT /api/v1/admin/unified-files/:id # 更新文件记录
|
|
|
|
|
+
|
|
|
|
|
+# 文件专用操作
|
|
|
|
|
+GET /api/v1/admin/unified-files/:id/url # 获取文件访问URL
|
|
|
|
|
+GET /api/v1/admin/unified-files/:id/download # 获取文件下载URL
|
|
|
|
|
+DELETE /api/v1/admin/unified-files/:id # 删除文件(MinIO+DB)
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
### 中间件使用规范
|
|
### 中间件使用规范
|
|
@@ -210,6 +284,7 @@ pnpm typecheck
|
|
|
|------|---------|-------------|--------|
|
|
|------|---------|-------------|--------|
|
|
|
| 2026-01-03 | 1.0 | 初始故事创建 | James (Claude Code) |
|
|
| 2026-01-03 | 1.0 | 初始故事创建 | James (Claude Code) |
|
|
|
| 2026-01-04 | 1.1 | 修复阶段 - 修复vitest配置、Entity、Service、Schema、测试 | James (Claude Code) |
|
|
| 2026-01-04 | 1.1 | 修复阶段 - 修复vitest配置、Entity、Service、Schema、测试 | James (Claude Code) |
|
|
|
|
|
+| 2026-01-04 | 1.2 | **发现缺失功能** - 添加补充任务11-21,补充完整的路由功能(上传策略、分片上传、URL获取、下载、删除)和测试工具 | James (Claude Code) |
|
|
|
|
|
|
|
|
## Dev Agent Record
|
|
## Dev Agent Record
|
|
|
|
|
|
|
@@ -235,6 +310,14 @@ claude-opus-4-5-20251101 (via Happy)
|
|
|
- 集成测试: 6/6 通过
|
|
- 集成测试: 6/6 通过
|
|
|
- 总计: 8/8 通过
|
|
- 总计: 8/8 通过
|
|
|
|
|
|
|
|
|
|
+4. **🚨 发现严重问题 (2026-01-04)**:
|
|
|
|
|
+ - 原始 `file-module` 包含完整的文件上传功能(upload-policy, multipart-policy, multipart-complete)
|
|
|
|
|
+ - 原始 `file-module` 包含文件URL获取和下载功能(get-url, download)
|
|
|
|
|
+ - 原始 `file-module` 包含独立的删除路由(delete.ts)
|
|
|
|
|
+ - **unified-file-module 缺失上述所有路由功能!**
|
|
|
|
|
+ - 缺失测试工具文件:`integration-test-utils.ts`, `integration-test-db.ts`
|
|
|
|
|
+ - 已添加补充任务11-21来完善功能
|
|
|
|
|
+
|
|
|
### File List
|
|
### File List
|
|
|
**新增文件**:
|
|
**新增文件**:
|
|
|
- `package.json` - 包配置,依赖 @d8d/shared-crud, @d8d/shared-utils, @d8d/tenant-module-mt
|
|
- `package.json` - 包配置,依赖 @d8d/shared-crud, @d8d/shared-utils, @d8d/tenant-module-mt
|