Files
ystp/docs/prd.md

163 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 产品需求文档PRD- ImageForge
目标:做一个接近商用的图片压缩网站 + 对外 API + 计费系统(可订阅/可计量)。
> 本文只描述“做什么/做到什么程度”。技术实现细节在 `docs/architecture.md`、`docs/api.md`、`docs/database.md`、`docs/deployment.md`、`docs/ui.md`。
---
## 1. 产品定位
### 1.1 一句话
提供高质量、稳定、可规模化的图片压缩服务:既能让普通用户在网页上批量压缩,也能让开发者通过 API Key 集成到 CI/CD 或业务系统,并按使用量/套餐计费。
### 1.2 核心价值
- **效果**:压缩比与画质控制可预期(可选有损/无损/近无损)。
- **体验**:网站拖拽即用、批量任务、可下载 ZIP、历史可追溯。
- **工程化**:对外 API 稳定、可观测、可限流、可计量、可计费。
- **安全合规**:默认去除隐私元数据、明确保留期限、支持删除。
### 1.3 非目标(明确不做/后做)
- 图像编辑(裁剪/滤镜/水印)不作为核心能力(后续可扩展)。
- CDN 图片处理(按 URL 在线压缩、自动适配)不作为首期必须。
- 视频/动图GIF/APNG暂不纳入首期除非强需求
---
## 2. 用户与角色
### 2.1 用户类型
- **游客Anonymous**:无需注册即可试用网站压缩(强限制、短保留)。
- **注册用户User**:使用网站 + 管理 API Key + 查看用量/发票。
- **企业/团队用户Team可选**:多人协作、共享额度、角色权限(可作为 V1+)。
- **管理员Admin**:风控、配置、用户/任务/账单审核、运营数据。
### 2.2 典型场景
- 设计师:批量压缩并打包下载,保留 7 天内历史。
- 开发者CI 里调用 API在发布前批量压缩静态资源。
- 运营:导出周期用量、查看节省带宽、按部门拆分账单(团队版)。
---
## 3. 功能范围(按模块)
### 3.1 网站压缩Web
- 拖拽/选择图片(单次多文件)。
- 压缩参数:
- 压缩率1-100压缩后体积占原图比例数值越小压缩越强100 表示不压缩)。
- 输出格式:保持原格式。
- 可选:限制宽高(等比缩放)。
- 可选:是否保留元数据(默认不保留)。
- 结果展示:
- 逐文件:原始大小、压缩后大小、压缩率、状态、下载。
- 汇总:总节省、下载 ZIP、失败文件原因。
- 历史记录:
- 最近任务列表(可筛选:日期/格式/状态)。
- 可再次下载(未过期)、或重新发起压缩(使用相同参数)。
- 游客试用:
- 自动创建匿名会话Cookie只允许较小文件/较少数量。
- 到期自动清理,不提供“历史”永久保存。
### 3.2 对外 APIDeveloper API
- API Key创建/禁用/轮换/权限范围(最小权限)。
- 压缩接口:
- 同步单图(可返回二进制或下载链接)。
- 批量/大文件异步任务(任务状态、下载 ZIP
- 可选Webhook 回调(替代轮询/WS用于服务端集成
- 工程化能力:
- 幂等Idempotency-Key避免重复扣费/重复任务。
- 配额与用量头信息(本订阅周期已用/剩余/上限)。
- 速率限制(标准 `Retry-After` + 速率头)。
### 3.3 计费与用量Billing & Metering
详见 `docs/billing.md`PRD 层面要求:
- 具备 **套餐**Free/Pro/Business**配额**(每订阅周期压缩次数、文件大小/批量上限、保留期等)。
- 具备 **订阅** 生命周期:试用、激活、到期、欠费、取消、恢复。
- 具备 **发票**Invoice**支付记录**Payment可追溯。
- 具备 **用量计量**:以“成功压缩的文件数”为主计量单位(可扩展到字节、转换格式等)。
- 具备 **风控策略**:异常调用/盗刷/滥用限制与告警。
### 3.4 管理后台Admin
- 用户管理:冻结/解冻、限流覆盖、手动调整套餐/额度、查看登录/调用记录。
- 任务管理:查看任务队列/失败原因、取消任务、重试。
- 计费管理:查看订阅与发票、手动赠送额度、处理退款(首期可做“手动退款登记”)。
- 系统配置:全局限流、文件限制、保留期、功能开关(注册开关等)。
- 监控面板QPS、延迟、错误率、队列长度、CPU/内存、S3/DB/Redis 状态。
---
## 4. 套餐与配额(建议默认值,可调)
> 这些是“产品默认建议”,最终可在上线前确认并固化到配置/数据库。
| 项 | Free | Pro | Business |
|---|---:|---:|---:|
| 每周期压缩次数(成功文件数) | 500 | 10,000 | 100,000+ |
| 单文件大小上限 | 5 MB | 20 MB | 50 MB |
| 单次批量上限 | 10 | 50 | 200 |
| 并发(建议) | 2 | 8 | 32 |
| 结果保留期 | 24 小时 | 7 天 | 30 天 |
| API 访问 | ❌ | ✅ | ✅ |
| Webhook | ❌ | ✅ | ✅ |
| SSO/团队 | ❌ | ❌ | 可选 |
周期定义(用于“本周期已用/剩余/重置时间”的展示与扣减):
- **Pro/Business付费**:按 Stripe 订阅周期(`current_period_start` ~ `current_period_end`),不是自然月。
- **Free未订阅**按自然月重置UTC+8
匿名试用(无需登录):
- 每日 10 次(以成功压缩文件数计,失败不计)
- 日界自然日UTC+8次日 00:00 重置
- 不提供 API Key
- 结果保留 24 小时
计量单位:
- **compression_unit**:每成功压缩 1 个输出文件计 1。
- 对于批量任务:按文件粒度计量;失败文件不计量。
- 幂等:同一个 Idempotency-Key 重试不重复计量。
---
## 5. 关键体验与质量指标NFR
### 5.1 性能与稳定性(建议目标)
- 99% 的同步单图压缩在 3s 内完成(小图、常见格式)。
- 批量任务在可预期时间内完成(提供进度/预估)。
- 系统可水平扩展API 与 Worker 可独立扩容。
### 5.2 安全与合规(必须)
- 默认移除 EXIF 等隐私元数据(可配置允许保留,但需明确提示)。
- 上传内容按保留期自动删除,且支持用户主动删除。
- API Key 仅创建时显示一次;支持轮换与禁用。
- 具备基础风控IP/账号/API Key 限流、异常突增告警。
---
## 6. MVP / V1 里程碑建议
### MVP可上线收费的最小闭环
- 网站压缩(同步 + 批量异步)+ 下载/ZIP + 历史(登录用户)。
- API Key + 同步单图(直接返回二进制)+ 异步批量(任务/下载)。
- 用量计量 + 套餐配额Free/Pro+ 订阅(至少一种支付渠道)+ 发票列表。
- 管理后台:用户/任务/配置/用量查看 + 手动赠送额度。
### V1+(商用增强)
- Webhook + SDKTS/Python/Go+ OpenAPI 自动生成。
- 团队/组织、多 Key 管理、细粒度权限、IP 白名单。
- 企业发票/税务字段、对公转账/线下支付流程。
- 风控升级:验证码、黑名单、设备指纹、异常画像。
---
## 7. 已确认口径(开工前)
- 支付渠道Stripe
- 计费策略:硬配额(超额返回 `QUOTA_EXCEEDED` / HTTP 402
- 配额周期:按订阅周期(非自然月)
- 匿名试用:支持(每日 10 次),不提供 API Key
- Free 套餐 API不开放仅 Pro/Business 可创建 API Key
- 邮件服务:注册需邮箱验证 + 密码重置SMTP预置多服务商模板
- 默认语言:中文
## 8. 待完成清单(上线前必须定稿)
- 法务页面:隐私政策、服务条款、数据保留与删除说明。(已提供模板,建议上线前法务审核)