Files
Genarrative/docs/prd/MY_TAB_BROWSE_HISTORY_PRD_2026-04-16.md
kdletters cbc27bad4a
Some checks failed
CI / verify (push) Has been cancelled
init with react+axum+spacetimedb
2026-04-26 18:06:23 +08:00

2.5 KiB

“我的”Tab 历史浏览 PRD

更新时间:2026-04-16

0. 目标

把“历史浏览”从本地浏览记录升级成账号级内容回访能力,让玩家能找回最近看过的作品,并支持跨设备同步。


1. 当前现状与问题

当前仓库里 platformBrowseHistory.ts 采用 localStorage 方案,存在明显限制:

  1. 仅本机可见
  2. 浏览记录上限固定且不可运营
  3. 删除缓存后全部丢失
  4. 无法用于账号级推荐和召回

2. 本期范围

2.1 本期要做

  1. 账号级历史浏览记录
  2. 历史浏览列表接口
  3. 浏览记录去重与排序
  4. 清空历史入口

2.2 本期不做

  1. 浏览历史搜索
  2. 收藏夹合并
  3. 基于历史的复杂推荐页

3. 详细设计

3.1 记录时机

用户进入公开作品详情页时写入浏览记录。

不写入的场景:

  • 草稿世界
  • 未真正打开详情的列表曝光

3.2 列表规则

每条记录展示:

  • 世界名
  • 作者名
  • 摘要
  • 封面
  • 最近浏览时间

排序:

  • visitedAt 倒序

去重:

  • 同一用户对同一作品只保留最近一次

3.3 管理动作

支持:

  1. 点击记录进入作品详情
  2. 清空全部浏览历史

首期不做单条删除,避免交互复杂化。


4. 后端设计

4.1 数据模型

建议新增:

user_browse_history

  • id
  • user_id
  • owner_user_id
  • profile_id
  • world_name
  • subtitle
  • summary_text
  • cover_image_src
  • theme_mode
  • author_display_name
  • visited_at

并对 user_id + owner_user_id + profile_id 做唯一约束或 upsert。

4.2 接口

POST /api/profile/browse-history

用途:

  • 进入作品详情时写入记录

GET /api/profile/browse-history

返回:

  • 浏览历史列表

DELETE /api/profile/browse-history

用途:

  • 清空当前账号浏览历史

5. 迁移策略

为了兼容当前本地历史:

  1. 用户首次登录后可尝试把本地历史批量上报一次
  2. 服务端落库成功后,以服务端历史为主
  3. 本地历史保留为短期兜底缓存,不再作为主数据源

6. 前端实现要求

  1. “我的”页优先读服务端历史
  2. 清空历史前给出确认
  3. 空态保持轻量,不写规则说明
  4. 失败时保留当前列表,不做闪断

7. 验收标准

  1. 浏览详情后能在历史浏览中看到记录
  2. 同一作品重复浏览只保留最新一条
  3. 跨设备登录后可看到同一份历史
  4. 清空后列表立即刷新