2.5 KiB
2.5 KiB
云端数据正确性修复设计
目标
修复排行榜快照无法显示本人信息、清除数据不彻底、TTS 服务端缓存失效及排行榜列表 key 无效四项问题。保持排行榜快照的低延迟特性,不向客户端公开其他用户的 openid。
范围
包含:
- 排行榜快照请求的本人排名与高亮。
- 云端训练数据的全量删除。
- TTS 缓存文档的正确读取。
- 排行榜 WXML 的稳定列表 key。
- Node 回归测试。
不包含:排行榜防作弊、数据模型重构、云函数部署配置文档。
设计
排行榜
定时任务继续写入不包含原始 openid 的公开快照。每个榜单项会保存仅供云函数匹配的 SHA-256 memberKey(由 openid 生成),用户请求命中快照时用当前调用者的 openid 生成同样的指纹,从而准确定位其榜单项并返回 myEntry。memberKey 在返回客户端前剥离,不在页面数据和本地缓存中保存。若用户未进入快照上限,返回空 myEntry,避免将完整榜单或其他用户标识暴露给客户端。
实时强刷路径保留现有全量计算逻辑,但返回数据与快照路径保持一致。榜单列表项以 rank 作为 WXML 的稳定 key。
清除数据
clearAll() 在已获取当前 openid 后,以游标或分页方式查询该 openid 的全部 plank_data 文档并逐一删除。任一单条删除失败会被记录并抛出,使调用页不显示“已清除”的错误成功状态;本地数据仍按现有流程清除。
TTS 缓存
doc(cacheKey).get() 的 data 是单文档对象。缓存读取改为直接读取 data.fileID,并继续保留文件不存在时重新合成的降级路径。
错误处理
- 快照或本人文档不可用时,排行榜继续降级至现有实时计算或本地展示路径。
- 无法获取 openid 时不尝试跨用户删除;清除操作返回失败。
- 删除任一云端文档失败时,不伪造成功反馈。
- TTS 缓存缺失或失效时才重新合成。
验收标准
- 快照命中时,榜内用户可被高亮;榜外用户可获得其个人排名(前提是快照包含其名次)。
- 同一 openid 的多份云端文档均会被删除,之后重启不会恢复旧训练数据。
- 未提供客户端 fileID 时,已有
tts_cache文档会返回缓存文件,而非重新合成。 - 排行榜循环不再引用不存在的
openidkey。 - 新增回归测试能先复现并验证上述行为。