# Dramivio 开发进展：后台采集控制

2026-10-04。代码已写入现有「短剧库」项目，不是原型页面。RN App 的既有开发保留在「juku-mobile」。CF 在线站仍是设计文档，业务服务尚未发布。

## 本轮落地

- Payload 侧栏新增“采集任务”。选择全部渠道或单个启用渠道，执行增量更新与补全、刷新目录、停止当前任务。
- 复用 Go 原有采集、补全队列和请求限速，没有另建任务引擎，也不调用原视频下载任务。
- 自动采集间隔为 0–168 小时。保存沿用原配置持久化，并通知正在等待的调度器；0 关闭后续自动采集。停止当前任务与关闭后续调度分别操作。
- 展示渠道状态、目录数量、补全进度、导入结果和下次执行时间。不展示渠道地址、代理密码或原始上游错误。
- 主目录与后续补全完成后，使用现有内部导入接口同步消费者目录；保留来源自然键和既有去重映射。冲突内容显示待核对，不覆盖已审核身份。
- 状态刷新每3秒运行一次，仅在任务进行时开启。未知提交不自动重发，管理员刷新读取真实结果。
- 390/1280 宽度可用，渠道卡片无阴影；任务完成后显示“已完成”，不残留“已启动”。

## 权限和操作边界

每个请求使用 Payload 官方会话并重新读取当前管理员角色。Go 接口仅接受既有 loopback/token 私有桥；公共接口不能用此 token 绕过原认证。浏览器不持有内部 token。

当前任务使用普通 runId：具体防止旧“停止”请求迟到后取消新任务。采集或补全正在运行时，重复启动返回冲突。停止取消实际请求，并清除尚未处理条目的 Pending 标记，已完成的元数据保留，之后可以重新开始。

修改间隔沿用配置锁与保存流程，失败不修改运行值；保存使用先前读取的间隔检查并发修改。目录持久化在锁内获取配置路径，避免与间隔修改发生配置读写竞争。

服务器持久化的是元数据和管理设置，不保存视频。采集和补全接口不能取得视频响应。本轮未增加 Redis 视频持久化或磁盘缓冲。

## 实际验证

| 范围 | 结果 | 覆盖 |
| --- | --- | --- |
| Payload 全量 | 76/76 | 实际官方会话、角色、迁移、管理接口与已有业务回归 |
| Go 采集测试及竞态检查 | 通过 | 8项采集测试：停止真实请求、旧停止请求、调度修改、关闭、配置并发、补全同步、导入冲突、输入与脱敏 |
| Go 定向回归 | 通过 | Administrator、Library、Channel、Consumer、Source 匹配测试；不是整个 Go 包全量 |
| Chrome 联调 | 5组通过 | 生产构建 Next/Payload、实际 Go 采集与导入、隔离 RAM PostgreSQL |

浏览器验证：丢失已经启动的响应后刷新找回真实任务；停止实际正在等待的标准 API 请求；保存0并重载；重新采集1部/2集并进入实际消费者查询；管理员角色撤销后隐藏旧控制。截图来自运行页面。标准 API 元数据使用本地测试传输，没有访问真实上游视频。

没有新增数据库结构或迁移；既有官方迁移仅应用于隔离测试库。没有迁移生产数据库、提交或推送代码、发布业务 Web、App 或 OTA。

[390宽度后台](collection-preview/collection-admin-390.png) · [1280宽度后台](collection-preview/collection-admin-1280.png) · [复核记录](dramivio-collection-review.md)

[可导入联调函数](dramivio-collection-check.mjs)导出 `runCollectionBrowserFixture()`，使用现有项目、依赖、本机 Chrome 和 Docker 的 RAM 测试数据库，结束后关闭测试服务。迁移到其他机器时需修改本地路径。

## 剩余范围

M00 仍需完成有追剧、逐集进度、额度和缓存记录时的内容归并迁移。目前拒绝直接改绑这类映射，防止现有用户状态丢失。广告、收费、推送关闭态继续按原设计接入；真实邮件、授权渠道、媒体交付、实体设备与正式发布尚未验收。
