Files
wx_pbzc/docs/superpowers/specs/2026-07-29-cloud-data-correctness-design.md
2026-07-29 11:03:44 +08:00

2.5 KiB

云端数据正确性修复设计

目标

修复排行榜快照无法显示本人信息、清除数据不彻底、TTS 服务端缓存失效及排行榜列表 key 无效四项问题。保持排行榜快照的低延迟特性,不向客户端公开其他用户的 openid。

范围

包含:

  1. 排行榜快照请求的本人排名与高亮。
  2. 云端训练数据的全量删除。
  3. TTS 缓存文档的正确读取。
  4. 排行榜 WXML 的稳定列表 key。
  5. Node 回归测试。

不包含:排行榜防作弊、数据模型重构、云函数部署配置文档。

设计

排行榜

定时任务继续写入不包含原始 openid 的公开快照。每个榜单项会保存仅供云函数匹配的 SHA-256 memberKey(由 openid 生成),用户请求命中快照时用当前调用者的 openid 生成同样的指纹,从而准确定位其榜单项并返回 myEntrymemberKey 在返回客户端前剥离,不在页面数据和本地缓存中保存。若用户未进入快照上限,返回空 myEntry,避免将完整榜单或其他用户标识暴露给客户端。

实时强刷路径保留现有全量计算逻辑,但返回数据与快照路径保持一致。榜单列表项以 rank 作为 WXML 的稳定 key。

清除数据

clearAll() 在已获取当前 openid 后,以游标或分页方式查询该 openid 的全部 plank_data 文档并逐一删除。任一单条删除失败会被记录并抛出,使调用页不显示“已清除”的错误成功状态;本地数据仍按现有流程清除。

TTS 缓存

doc(cacheKey).get()data 是单文档对象。缓存读取改为直接读取 data.fileID,并继续保留文件不存在时重新合成的降级路径。

错误处理

  • 快照或本人文档不可用时,排行榜继续降级至现有实时计算或本地展示路径。
  • 无法获取 openid 时不尝试跨用户删除;清除操作返回失败。
  • 删除任一云端文档失败时,不伪造成功反馈。
  • TTS 缓存缺失或失效时才重新合成。

验收标准

  1. 快照命中时,榜内用户可被高亮;榜外用户可获得其个人排名(前提是快照包含其名次)。
  2. 同一 openid 的多份云端文档均会被删除,之后重启不会恢复旧训练数据。
  3. 未提供客户端 fileID 时,已有 tts_cache 文档会返回缓存文件,而非重新合成。
  4. 排行榜循环不再引用不存在的 openid key。
  5. 新增回归测试能先复现并验证上述行为。