6992f59cd2
核心变化: - dashboard.md 替代 DASHBOARD + ROADMAP,人类+Arch AI 唯一入口 - DECISIONS.md 人类决策入口,≤3 条待决策 - .ai/tasks/ 14 个独立 task 文件(Coder 8 + Tester 6),弱模型自包含可独立执行 - 旧 today/queue 归档,每个角色启动 ≤2 个文件 - ADR-012 跨平台「高模型指挥小模型」协作架构落地 - 知识库补全:L-002~005、P-004~005、ADR-011~012 - Arch AI 上下文资源管理硬约束写入 principles.md Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
79 lines
2.2 KiB
Markdown
79 lines
2.2 KiB
Markdown
# Task P01-006: Print 模块(PDF 生成 + S3 + 过期清理)
|
||
|
||
## 元信息
|
||
|
||
| 字段 | 值 |
|
||
|------|-----|
|
||
| 状态 | `todo` |
|
||
| 优先级 | P0 |
|
||
| 依赖 | P01-001(DB Schema,需要 print_tasks 表) |
|
||
| 分配给 | Coder AI (Trae CN + GLM-4.6) |
|
||
|
||
## 输入
|
||
|
||
**要读的文件**:
|
||
- `docs/02_系统架构/模块设计.md` — 3.7 Print 模块(PDF 输出)
|
||
- `docs/02_系统架构/数据模型.md` — 2.11 print_tasks 表
|
||
- `docs/02_系统架构/总体架构.md` — 3.3 打印/PDF 输出数据流
|
||
- `projects/app/src/db/schema/*.ts` — P01-001 产出的 Drizzle Schema
|
||
|
||
**参考的 ADR**:
|
||
- 无特殊 ADR
|
||
|
||
**上游依赖产出**:
|
||
- P01-001: print_tasks 表 Drizzle Schema
|
||
|
||
## 输出
|
||
|
||
**要生成/修改的文件**:
|
||
- `projects/app/src/modules/print/print.module.ts`
|
||
- `projects/app/src/modules/print/print.controller.ts`
|
||
- `projects/app/src/modules/print/print.service.ts`
|
||
|
||
**API**:
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| POST | /print/generate | 提交错题 ID 列表 → 生成 PDF → 上传 S3 |
|
||
| GET | /print/task/:id | 查询生成进度 |
|
||
| GET | /print/download/:id | 获取下载链接(24h 有效) |
|
||
|
||
**关键逻辑**:
|
||
- PDF 生成: PDFKit, A4 纸张, 300 DPI
|
||
- 错题图片嵌入 PDF,每页一道题
|
||
- 上传 S3(bucket: errlens-prints)
|
||
- 24 小时过期: 数据库 expires_at 字段 + 定时任务清理(node-cron)
|
||
- 下载链接一次性签名 URL
|
||
|
||
## 验收方法
|
||
|
||
```bash
|
||
# 编译检查
|
||
npx tsc --noEmit
|
||
|
||
# 提交生成任务
|
||
curl -X POST http://localhost:3000/print/generate \
|
||
-H "Authorization: Bearer {token}" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"errorItemIds": ["uuid-1", "uuid-2"]}'
|
||
# 预期: { taskId, status: "processing" }
|
||
|
||
# 查询进度
|
||
curl http://localhost:3000/print/task/{taskId}
|
||
# 预期: { status: "completed", downloadUrl: "..." }
|
||
```
|
||
|
||
## 约束
|
||
|
||
- 不碰: `projects/app/tests/`、其他 modules/ 目录
|
||
- 技术栈: NestJS + PDFKit + @aws-sdk/client-s3 + node-cron
|
||
- 遵循: 下载链接 24h 过期,S3 文件同步过期清理
|
||
|
||
## 完成报告
|
||
|
||
> Coder 完成后填写。Commit message 以 `[READY_FOR_TEST]` 结尾。
|
||
|
||
- [ ] 输出文件已生成
|
||
- [ ] 验收命令通过
|
||
- [ ] Commit: `{hash}`
|
||
- [ ] Commit message: `feat(P01-006): Print 模块(PDF+S3+24h过期清理) [READY_FOR_TEST]`
|