# 消费者功能与框架接入

2026-10-03。本页记录两个现有项目的当前开发结果，按已确认设计实施。代码与本地联调已推进，真实 API 服务、App 安装包和 OTA 尚未发布。

## 当前功能

| 模块 | 已接入 | 仍需验收 |
| --- | --- | --- |
| 首页与查询 | App/Web 四栏导航；10个后台热门标签横滑、右侧固定筛选；双列推荐和每页10部服务端分页；二级页可改搜索词 | 真实开源模型/语义索引、实际大目录与设备性能 |
| 邮箱登录 | Better Auth 1.7.7 官方 Email OTP；首次验证自动注册；App官方Expo客户端与SecureStore；跨端同一账号；登录后恢复确定的筛选/追剧操作 | 真实邮箱投递、协议同意记录及完整账号生命周期 |
| 运营后台 | Payload 3.90.2 官方账号、角色、配置表单、迁移和独立发布命令；保存草稿不直接改线上；首个管理员只由可信本地初始化；额度与邀请配置、草稿及独立发布已接入 | 渠道/任务/内容映射/账本与奖励审核接入新后台 |
| 聚合内容 | PostgreSQL统一剧/版本/集/来源集；明确映射去重，同名不自动合并；按选中来源返回实际集数；权限和发布版本约束游标 | 已有状态的合并迁移、AI索引与自动任务闭环 |
| 追剧 | 登录后按统一剧ID保存；换来源仍是一颗爱心；App/Web共用账号记录；下架记录可移除 | 真机与长期同步体验 |
| 播放操作层 | App按最早经典稿恢复剧名、集数、进度、选集与倍速，保留350ms长按2倍；Web经典控制层通过合成媒体浏览器复核 | 正式权益接入、iOS媒体隔离及实体设备 |
| 逐集记录 | 后台记录每集位置和完成估计、统一集身份、序号及会话版本；Go打开播放器从账号记录续播；App已接新接口与有界离线位置队列 | App/Web边界已复测关闭；真实媒体10秒保存误差与实体设备仍待验收 |
| 播放额度 | PG账本与Go/官方账号接口；共享已用集、设备预算、游客合并、短时预留、奖励与到账起算 | 真实媒体issuer与App安装资格 |
| 邀请 | 官方注册/登录hook、邀请码、一次绑定、后台规则快照、风险与名额预留、审核和奖励Outbox；App/Web双语页面、记录与申诉 | 真实观看签名/收件水位、运营结案和生产worker |
| 检索增强 | 可选自托管Ollama有界查询规划；真实目录与简介匹配、权限/分页、预算和并发降级 | 按C01完成真实模型/语义召回评测；当前HTTP模型替身不是正式模型验收 |
| 直连与转发 | 默认用户终端先实际播放；真实失败后同一次播放切转发；必要时才兼容解码；健康直连不占网站视频流量；视频仅RAM | 真实源/设备/Safari、实际流量费用；Redis/Valkey视频缓存尚未接入 |

播放器次数显示只采用真实服务端权益，未接额度账本的页面不显示演示余额。广告、收费和通知保持关闭；此前高保真原型中的广告页是设计案例，不代表已经投放。

## 逐集记录的规则

- 每个账号、统一集保存位置；向后拖动允许位置变小，不能用“取最大秒数”覆盖用户选择。
- 新端开始需携带读取到的播放版本；同一个开始请求重试恢复同一会话。另一端接管后，旧端不能再次覆盖。
- 清除全历史或指定剧后递增既有删除版本；旧播放页、旧会话和断网队列不能通过读取新版本自动恢复被删记录。
- App离线补报只恢复位置，`restored=true`不计观看区间；退出和换账号清理队列，迟到响应不恢复旧数据。旧下载文件不自动归属新登录账号。
- 已看和完成集号为统一内容编号；续播会转换为选中来源的实际集号，不把两种编号直接混用。
- `validWatchSeconds`是保守播放估计。拖到结尾不算看完；它不是邀请奖励或额度扣减的凭证。可信观看发奖还需要源方交付佐证。

## 实际测试

| 验证 | 当前结果 | 范围 |
| --- | --- | --- |
| 官方邮箱框架与SMTP失败 | 10项通过 | 真实框架、隔离PostgreSQL；邮件在本地捕获，不代表公网投递成功 |
| 统一目录、逐集状态、内部HTTP | 110项通过 | 真实PostgreSQL与官方框架：额度、搜索、邀请、注册/登录hook；并发幂等、分页/发布竞态、实际来源集数、映射、seek、接管、删除和离线补报；包含10000集批量元数据导入 |
| Payload管理员与发布权限 | 27项Node与8组独立REST检查通过 | 官方REST、实际迁移与独立数据库；匿名首注册拒绝、角色撤销、未定额度发布恢复；新增邀请9个真实PG/Payload场景通过 |
| 后台浏览器 | 15项通过 | 实际Next生产构建/Payload登录、标签发布、额度草稿、未保存禁用、响应丢失或畸形后刷新重试；另额度18组、邀请25组独立React/Chrome检查通过；未部署生产后台 |
| Web与API联合流程 | 21项通过 | Chrome + Go + Better Auth + PostgreSQL；真实邮箱身份、追剧、逐集位置、默认续播、实际Web首帧后记录、暂停/seek、跨浏览器接管、删除拒旧补报、邀请默认关闭/真实绑定/共享IP风险、规则更新和关闭后旧快照与英文记录；仅plan/MP4用本地替身 |
| Web消费者浏览器 | 42场景通过，130项Node通过，原媒体传输28场景回归通过 | 实际Chrome、合成竖屏媒体与接口替身；移动/桌面控制层、登录叠层、焦点和尺寸适配；不等于真实供应商或Safari通过 |
| App当前累计回归 | 148项通过、类型检查与Android原生接入编译通过 | 含官方SDK、进度适配与实际React控件；新增邀请API8项、实际React12项；逐集与邀请独立复审通过；Expo Clipboard官方预编译库已自动链接并通过Expo Release Kotlin编译，不等于实体设备/完整安装包/iOS通过 |

[消费者与后台独立复审](dramivio-consumer-boundary-review.md)的1个P1和3个P2已独立复测关闭。[逐集进度独立复审](dramivio-progress-boundary-review.md)的3个P2也已独立复验关闭：身份重排拒旧请求、追剧页使用下一未完成集、下一集缺失时保留当前集暂停。[Web进度复审](dramivio-web-progress-boundary-review.md)另关闭2个P2：跨标签页书签覆盖和畸形200响应丢队列。真机与生产验证尚未完成。

## 邀请选型

[邀请兼容审计](dramivio-referral-compatibility.md)用当前官方框架与真实PostgreSQL验证：社区候选插件0.3.0不会在Email OTP首次注册时建立关系，因此没有装入生产依赖。复用Better Auth新用户创建hook，邀请归属只补小型业务模块；活动规则、审核和奖励由后台与账本处理，不自写验证码系统。

## 下一阶段

[邀请实现](dramivio-referrals-implementation.md)与[独立领域复审](dramivio-referral-boundary-review.md)已补齐归属、同IP风险和既有设备判断。双端页面只显示真实规则与记录，不把普通位置上报当达标证据。

[额度事务与接口](dramivio-entitlements-implementation.md)已完成本地集成，[接口独立复审](dramivio-entitlement-boundary-review.md)10组通过；媒体签发仍需接线。[搜索复审](dramivio-search-boundary-review.md)关闭3项问题，真实模型评测仍待C01。Payload额度配置、邀请活动配置与官方邀请归属已完成本地接入和实际后台浏览器验收。真实观看证明、收件水位和生产worker尚未接通，不宣称已能自动观看发奖。Web每日10集、App每日50集、跨端共享与同集当日免重复扣的规则不变。裸长效媒体地址不能硬限次数，受控授权能力缺失的资源不能冒充已实现严格额度。

随后完成登录App缓存与许可、账号设备/邮箱/注销、运营渠道任务与扩展关闭态。已有标准渠道和代理线路技术继续复用，网站视频不写磁盘。

## 本地预览

以下为合成目录和测试账号的浏览器画面，不是生产服务。

![手机首页](consumer-preview/home-390.png)

![配置后台](consumer-preview/admin-1280.png)

![邀请规则后台](admin-preview/invitation-1280.png)
