Files
FruitServer/docs/prd-phase1.md
Vicky b3179fc836 refactor: 后端标识统一为 FruitShorts,并落地 05 离线下载
为什么:
1) 产品已定名 FruitShorts,但后端仍是 reelshort 系列标识 —— Java 包 com.reelshort、
   模块名与 jar 名 reelshort-*、spring.application.name、配置前缀 reelshort.*,
   这些会出现在启动日志、命令行和 IDE 里,与产品名不一致。本次整体替换为 fruitshorts,
   数据库连接名上一轮已改名,保持不变。
2) 第一阶段下一批第 1 步(05 离线下载)要求把下载授权(设备绑定/有效期/吊销)、
   下载任务与断点续传、配额与过期清理、仅 Wi-Fi 规则做成完整接口,本提交一并落地。
3) 顺带修复:schema-phase1.sql 里 playback_ticket / order_event 仍按普通表定义唯一索引,
   表分区化之后重跑脚本必定报错(分区表的唯一索引必须包含分区键)。改为在本脚本里就
   按分区表定义,并验证脚本可重复执行。
2026-10-15 11:44:26 +08:00

273 lines
16 KiB
Markdown
Raw Permalink 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.
# 短剧 App 第一阶段 PRD(印尼首发)
> 版本 v1.0 · 依据《四阶段功能规划与工作量评估》第一阶段明细(10 个模块 / 614 净人天)
> 配套文档:[后端服务设计](./backend-design-phase1.md) · [架构设计](./architecture-design.md)
## 0. 文档说明
本 PRD 覆盖第一阶段(M0–M5)的产品范围,即"可上线、可收费、可运营、可供给内容"的 MVP 闭环。
第二至第四阶段(会员订阅、广告、个性化推荐、多区域部署、DRM)不在本文范围内,仅在衔接处标注预留。
阅读约定:`P0` 为上线阻塞项,`P1` 为可延后但不能砍项;"人天"沿用评估表的合并口径,不重复计入通用后台与基础服务。
## 1. 背景与目标
### 1.1 背景
短剧(竖屏、单集 1–3 分钟、强钩子、连续解锁)在国内已被验证。本项目把它做到海外,首发印尼:
人口 2.8 亿、移动端占比极高、年轻用户对短视频形态接受度高,但支付能力分散、网络质量参差、
内容与宗教文化敏感度高,因此不能直接照搬国内产品与运营方式。
### 1.2 第一阶段目标
做出一个能真实跑起来的业务闭环,而不是功能演示:
1. **能看**:iOS / Android 双端可安装,播放稳定,弱网可用。
2. **能收**:分集收费闭环走通,且完全符合 Apple / Google 的数字商品结算规则。
3. **能供给**:创作者能自助入驻、上传、提交审核、看到数据。
4. **能运营**:运营能编排内容、处理审核与举报、查订单与用户、看经营大盘。
5. **能被度量**:埋点口径统一,核心指标可对账、可归因。
### 1.3 阶段退出标准
- 通过 UAT 与安全测试,高危漏洞清零;
- 支付、播放、内容上下架、账号注销四条全链路端到端通过;
- 商店审核材料齐备且首次提审材料可完整复现核心流程。
## 2. 市场与假设(M0 决策门禁)
以下四项未冻结前不启动研发,否则登录、支付、版权、短信、UI 与商店资料会反复返工。
| 决策项 | 当前假设 | 影响面 |
| --- | --- | --- |
| 首发市场 | 印度尼西亚 | 支付税制、短信到达率、隐私法、内容分级 |
| 首发语言 | 印尼语(Bahasa Indonesia)为主,界面预留英文 | 文案长度、字幕、客服、ASO |
| 内容形态 | 竖屏短剧,单集 1–3 分钟,单剧 40–80 集 | 转码阶梯、CDN 成本、存储、审核成本 |
| 收费方式 | 金币解锁分集,走 Apple IAP / Google Play Billing | 财务模型(15%–30% 抽成 + 税费)、审核 |
### 2.1 印尼本地化的硬性要求
- **PSE 注册**:印尼通信与信息部(Kominfo)要求电子系统运营商完成 PSE 注册,未注册可能被封锁。立项即启动。
- **数据保护**:印尼《个人数据保护法》(UU 27/2022)要求明示同意、可删除、可导出,跨境传输需合法依据。
- **内容分级与合规**:需遵守印尼内容分级(R13/R17/R21 等)与色情、宗教、政治敏感内容的严格限制;上线前需完成内容审核供应商与规则配置。
- **商店支付**:App 内数字内容必须走商店结算,任何引导外部支付的文案都会被拒审或下架。
- **网络与资费**:4G 为主、数据资费敏感、部分区域带宽受限 → 默认低码率起播,清晰度手工可上调。
- **时区与货币**:WIB(UTC+7),IDR 展示按千位分隔(`Rp 12.000`);所有时间字段按用户本地时区展示。
## 3. 用户与角色
| 角色 | 主要场景 | 关键诉求 |
| --- | --- | --- |
| 观众(C 端) | 找剧、刷剧、追更、解锁分集 | 起播快、不卡、剧情钩子密、价格透明 |
| 创作者 | 入驻、上传、提交审核、看数据 | 上传稳定、审核反馈明确、数据可信 |
| 内容审核 | 审核创作者内容与片源 | 批量高效、驳回原因可复用、留痕 |
| 运营 | 编排内容、配置定价与活动、看大盘 | 改动即时生效、可回滚 |
| 客服 | 处理退款、账号、播放问题 | 按用户/订单快速检索,有处理入口 |
| 财务 | 对账、退款、异常订单 | 订单与商店账单可对账,差异可追溯 |
| 管理员 | 账号与权限管理 | RBAC 清晰、敏感操作留痕 |
## 4. 范围
### 4.1 纳入(第一阶段)
| 模块 | 人天 | 优先级 |
| --- | --- | --- |
| 01 基础与交付准备 | 8 | P0 |
| 02 用户账号与登录 | 35 | P0 |
| 03 内容发现与详情 | 37 | P0 |
| 04 播放器与播放控制 | 44 | P0 |
| 05 记录、收藏与下载 | 71 | P0 |
| 06 评论、点赞与分享 | 64 | P1 |
| 07 创作者中心 | 119 | P0 |
| 08 平台运营后台 | 100 | P0 |
| 09 分集收费与支付 | 98 | P0 |
| 10 质量、数据与上线 | 38 | P0 |
### 4.2 明确不做(留到后续阶段)
个性化推荐模型、会员订阅与自动续费、广告插入、创作者分成结算、多语言配音、DRM、多区域容灾、TV/Web 观看端。
## 5. 功能需求
每个模块给出:需求点 → 验收要点。验收要点直接作为 QA 的测试设计输入。
### 5.1 基础与交付准备(8 人天)
需求点:需求澄清与范围冻结;技术架构、API 契约与数据模型;双端与 Web 工程骨架;后端服务骨架、鉴权与基础中间件;
对象存储与转码链路;短信/邮件/推送通道;崩溃与性能监控;埋点规范与数据字典;CI/CD、多环境、域名与 CDN;商店账号与签名;隐私与支付前置。
验收要点:契约兼容与越权校验;构建产物可复现;上传转码回调闭环;多国家短信到达与限流;事件去重与口径一致。
### 5.2 用户账号与登录(35 人天)
需求点:手机号 + 邮箱 + Apple / Google 三种登录;多国家区号与 OTP 风控;隐私同意与年龄门槛;Token 与多设备会话;
资料(昵称/头像/地区);账号注销与数据导出;封禁、限制与申诉;登录注册限流反刷。
验收要点:
- 并发注册幂等,重复提交不产生重复账号;
- 验证码刷取被拦截(同号/同 IP/同设备多维频控 + 图形验证码 + 熔断);
- 跨端登录状态一致,登出后旧 Token 立即失效;
- Sign in with Apple 提供"隐藏邮箱"路径下的账号可正常续用;
- 注销后 15 天内数据不可恢复,导出内容完整且不含他人数据。
### 5.3 内容发现与详情(37 人天)
需求点:首页浏览流;关键词搜索(含热词与历史);分类与榜单;详情与选集;规则推荐与热度排序;地区/年龄/状态/版权过滤;加载、空态、离线与错误重试。
验收要点:上下架与地区过滤实时生效;分页刷新不错位不重复;深链进入返回栈正确;空结果有兜底;弱网超时不空白。
### 5.4 播放器与播放控制(44 人天)
需求点:HLS 播放与生命周期管理;播放地址签发与试看校验;快进快退与手势;0.75x–2.0x 倍速与记忆;全屏/旋转/锁屏;
断点续播与异常恢复;自适应码率与清晰度切换;基础字幕;缓冲/断网/错误码提示;自动下一集;音频焦点与系统媒体控制;播放事件埋点。
验收要点(本模块是全阶段最影响口碑的一环):
- 首帧 P95 < 1.5s,卡顿率 < 2%,弱网(3G / 丢包 5%)可降级播放不黑屏;
- 播放地址不可复用:签名过期后直接播放失败,越权拼接地址拿不到片源;
- 切集不重复计数,进度不跳变;
- 全程 2 小时连续播放无内存增长与音画不同步。
### 5.5 记录、收藏与下载(71 人天)
需求点:观看记录(列表、续播、清理);收藏(状态同步、排序、批量删除);离线下载(队列、断点续传、加密存储与离线播放);
下载授权与设备绑定、过期与吊销;存储占用管理与仅 Wi-Fi 下载;跨端同步策略;与账号注销联动。
验收要点:授权、过期、吊销、换机四条路径可验证;下载文件无法被外部播放器直接提取;跨端进度冲突有确定的合并规则。
> 产品决策待定:第一阶段是否启用"真实离线下载"。若法务与版权未就绪,先做受控缓存(App 内缓存 + 授权有效期),
> 该决策会影响 05 模块约 20 人天的用量。
### 5.6 评论、点赞与分享(64 人天,P1)
需求点:点赞(动画、计数、防刷);评论(发布、回复、删除、分页、审核状态);敏感词、举报、拉黑与审核联动;
系统分享、复制链接与海报;深链与落地页;分享素材模板。
验收要点:计数与实际关系一致(异步最终一致但可对账);审核中的评论对他人不可见;深链在未安装场景可唤起商店。
### 5.7 创作者中心(119 人天,最大单模块)
需求点:创作者入驻(身份资料、协议、审核状态);工作台与内容列表;分片上传与断点续传;上传任务校验、合并与回调;
剧集/分集/封面/标签管理;多码率转码与媒资管理;人工审核与驳回原因;定时发布、下架、撤回与版权到期;
免费/收费分集与试看规则;数据看板;审核结果与系统公告;角色隔离与敏感操作审计;多语言与币种展示预留。
验收要点:上传中断可续传且不产生重复媒资;转码失败可重试且失败原因可见;审核状态流转无"卡死"态;
创作者只能看到自己的数据(水平越权测试覆盖);版权到期自动下架。
### 5.8 平台运营后台(100 人天)
需求点:管理员登录、RBAC、审批与操作审计;内容/剧集/分类/标签/榜单/推荐位管理;创作者资质与违规处理;
用户检索与客服视图;评论举报与封禁申诉;订单、退款、补发与权益处理;定价与活动配置;经营大盘;批量操作与受限导出。
验收要点:权限变更后刷新即生效;关键操作 100% 留痕(操作人、时间、请求与响应);导出受限且可审计。
### 5.9 分集收费与支付(98 人天)
需求点:钱包与金币;订单与权益幂等状态机;商品配置与价格分层;Apple IAP 与 Google Play Billing 集成;服务端票据校验与重放防护;
恢复购买与跨设备权益;退款、撤销、拒付与权益回收;商店账单对账;付费弹窗与解锁联动;免费集/试看/已购判断;定价实验预留。
验收要点:
- 同一票据重复回调只发放一次权益(幂等);
- 票据丢失、异步通知延迟时,补偿任务能在 T+1 内自动修复并留痕;
- 恢复购买在换设备、重装、切区三种场景下权益一致;
- 每日与商店账单自动对账,差异进入人工处理队列。
### 5.10 质量、数据与上线(38 人天)
需求点:核心用例自动化与冒烟;接口契约与集成测试;登录/内容/播放/支付/后台压测;安全测试;
IAP/Billing 沙盒到权益的端到端验证;埋点与指标一致性验证;UAT;商店素材与提审;灰度与回滚演练;值班与事故响应;备份与灾难恢复。
## 6. 核心流程与状态机
**内容状态**:草稿 → 待审核 → 审核中 →(驳回 → 草稿)→ 已通过 → 定时发布 → 已发布 → 已下架 / 版权到期。
任何状态下都必须能被运营强制下架,且下架对已缓存列表在 60s 内生效。
**订单状态**:创建 → 已支付 → 已发放权益;异常分支:支付超时关闭、票据校验失败待补偿、退款中、已退款(回收权益)。
所有状态迁移必须幂等,重复回调不改变已终态订单。
**权益判定优先级**:已购 > 活动免费 > 免费集 > 试看剩余 > 金币可扣 > 需充值。
判定结果必须由服务端返回,客户端不得自行推断可播放性。
**账号状态**:未注册 → 已注册 → (受限 → 申诉中 → 恢复)/ 已注销。封禁与注销必须同步清理会话与缓存。
## 7. 非功能需求
### 7.1 性能与容量
业务方给的目标是"日 1 万加用户同时观看视频流畅"。这里按更严的口径落地:
| 指标 | 目标 | 说明 |
| --- | --- | --- |
| 并发播放路数 | ≥ 10,000 路不劣化 | 对应 DAU 约 25–35 万;详见后端设计容量推导 |
| 首帧时间 P95 | < 1.5s | 4G 网络、360p 起播 |
| 卡顿率 | < 2% | 播放时长加权 |
| 接口延迟 P95 | < 100ms(客户端热点接口 < 50ms) | 服务端耗时 |
| 可用性 | 99.9%(第一阶段) | 月度 |
若实际口径是"DAU 1 万",资源需求下降约一个数量级,可先按小规格部署、保留水平扩容能力。
### 7.2 安全
播放地址签名与防盗链;接口越权校验(水平 + 垂直);支付服务端校验与重放防护;后台敏感操作二次确认与留痕;
密钥集中托管与轮换;上线前渗透测试并将高危漏洞清零。
### 7.3 数据与埋点
统一指标字典,核心指标单一口径:播放(起播/卡顿/完播)、留存、收入、支付成功率。
播放与收入类指标需与财务、商店账单对账,日报可追溯。
### 7.4 合规
隐私政策与用户协议随目标市场本地化;同意管理记录可审计;SDK 清单与商店 Data Safety / Privacy Labels 与实际数据流一致;
账号注销与数据导出在承诺时限内完成。
## 8. 核心指标
- **北极星**:日均有效观看时长(有效定义:单次播放 ≥ 10s 且进度 ≥ 5%)。
- **激活漏斗**:安装 → 首次启动 → 首页首播 → 完成 1 集 → 次日留存。
- **商业化**:付费转化率、ARPPU、解锁集数、退款率、支付成功率。
- **供给**:创作者上传量、审核通过率、平均审核时长、上架内容数。
- **质量**:崩溃率、起播 P95、卡顿率、错误码分布。
## 9. 依赖与前置
以下前置项的关键路径在外部,研发无法加速,必须在 M0 并行启动(完整清单见评估表"外部前置与采购"):
1. 海外上架主体、DUNS / 企业验证、Apple 与 Google 组织账号;
2. 公司域名、企业邮箱与官网(隐私政策与客服页依赖它);
3. 隐私政策、用户协议、社区规范与版权政策;
4. 海外短信通道(目标市场到达率与成本必须先压测);
5. 云账号、对象存储、数据库、缓存、日志与 CDN(区域选择与预算同步确认);
6. Apple / Google 支付账号、税务资料与商品配置;
7. 内容版权台账(地区、期限、渠道、转授权范围必须结构化)。
## 10. 主要风险
| 风险 | 影响 | 应对 |
| --- | --- | --- |
| 市场/语言/内容形态未冻结 | 全链路返工 | 设为 M0 门禁,书面签署后进入变更控制 |
| 商店账号与主体审核超期 | 无法提审 | 立项首周并行申请,准备备用主体 |
| 支付一致性与跨账号权益 | 资损与投诉 | 幂等状态机 + 补偿任务 + 每日对账 + 客服入口 |
| 视频与 CDN 成本失控 | 毛利被侵蚀 | 多码率策略、冷热分层、命中率与单位成本看板 |
| 短信成本与到达率 | 无法登录 | 多供应商 + 频控 + 图形验证码 + 熔断 |
| 内容安全与版权 | 下架或处罚 | 机审 + 人审 + 举报 + 申诉 + 结构化版权台账 |
| 范围蔓延 | 无法形成可上线产品 | 冻结 MVP,变更需影响评估与批准 |
## 11. 里程碑
| 里程碑 | 内容 | 产出 |
| --- | --- | --- |
| M0 | 决策与前置 | 四项决策冻结、账号与主体、云与短信采购 |
| M1 | 骨架与通道 | 双端与后端骨架、鉴权、存储转码链路、通道接入 |
| M2 | 核心链路 | 账号、内容、播放器、记录收藏、创作者上传 |
| M3 | 商业化 | 支付与权益、运营后台、内容治理 |
| M4 | 提审准备 | 压测与安全测试、埋点验收、商店素材与提审 |
| M5 | 上线与运营 | 灰度发布、值班与回滚演练、上线回归 |
## 12. 交付物清单
双端 App(iOS / Android)、创作者中心、运营后台、后端服务与 OpenAPI 契约、ERD、
转码与媒资流水线、监控与埋点看板、测试与压测报告、安全测试报告、商店提审素材、发布与回滚 Runbook。