Skip to content

成绩互动与内容反馈工作流 ​

成绩页面的点赞、评论、回复和内容反馈既有用户动作,也有审核动作。客户端要显示状态差异、控制重复提交并保护评论中的个人信息。

互动对象 ​

一条曲目互动摘要通常包含:

  • 曲目编号;
  • 点赞数和点踩数;
  • 评论数;
  • 更新时间;
  • 当前用户的互动状态(如果返回)。

评论对象通常包含评论编号、曲目编号、父评论、作者显示名、正文、互动数和时间。显示时要考虑作者隐私和撤回状态。

读取流程 ​

单曲读取 ​

  1. 从当前页面得到曲目编号;
  2. 读取该曲目的互动摘要;
  3. 需要时读取评论;
  4. 对评论排序并显示分页/折叠状态;
  5. 缺少评论数组时显示空状态,不显示错误。

批量读取 ​

批量读取时每次只提交合理数量的曲目编号,按服务限频。批量响应缺少某曲目时,不能把它当成“曲目不存在”;可以在页面上标记未返回并有限重试一次。

批量读取包含审核信息时,只对拥有权限的账号请求;普通客户端不要自行加入审核开关。

点赞和点踩 ​

动作值必须来自页面允许的集合。点击后:

  1. 禁用当前按钮;
  2. 保存点击前摘要;
  3. 提交一次;
  4. 使用响应摘要更新页面;
  5. 必要时重新读取确认;
  6. 失败时恢复原显示并保留消息。

网络超时不能自动点第二次。先读取最新摘要,确认当前用户的互动状态,再允许下一次操作。

不要把本地计数直接加一当作最终值,因为其它用户可能同时互动。

发表评论 ​

评论发送前校验:

  • 正文非空;
  • 长度不超过页面限制;
  • 不包含 Token、密码、访问码或个人联系方式;
  • 不直接复制未授权的聊天记录;
  • 如果包含内容问题,使用可复现的非敏感描述。

提交中保留正文但锁定按钮。成功后以服务返回的评论对象为准,不要在本地自行生成永久评论编号。

回复评论 ​

回复请求要携带父评论标识。显示层应明确“回复哪一条评论”,避免移动端滚动后把正文发送到错误父评论。父评论已经删除或不可见时,先刷新评论列表,不要用旧标识重试。

删除评论 ​

删除前显示作者、时间和正文摘要,并确认当前用户拥有删除权限。删除请求超时后重新读取评论:

  • 评论已不存在:按已删除处理;
  • 评论仍存在:显示未确认,不自动重试;
  • 返回权限失败:停止尝试并显示权限提示。

删除不应被实现成“清空本地列表”,否则用户无法区分本地刷新和服务端删除。

内容反馈 ​

反馈的目的应是说明内容问题,而不是请求绕过权限。理由中写:

  • 曲目编号和难度;
  • 看到的现象;
  • 发生时间或版本;
  • 最小复现步骤;
  • 是否只发生在一个环境;
  • 已经尝试的安全动作。

不要写入完整日志、服务地址、私钥、账号备份或他人个人信息。

提交后状态可能是待处理、已通过、已拒绝或已隐藏/显示决定。客户端不能把提交成功直接显示成管理员已经同意。

撤回反馈 ​

撤回只作用于页面返回且当前用户有权限的反馈。撤回前显示目标编号和原因摘要,确认后提交一次,成功后重新读取历史。

如果撤回请求超时,先查看历史状态。不要通过重复撤回改变已经处理的审核记录。

审核列表 ​

审核列表可能按状态筛选。审核客户端应:

  • 清楚显示当前筛选状态;
  • 显示创建和更新时间;
  • 区分提交人、处理人和内容作者;
  • 不把内部备注显示给普通用户;
  • 决定前读取最新对象;
  • 保存结果并重新读取。

审核动作通常是隐藏或显示,备注应简洁、非敏感、可解释。不要在备注中粘贴内部地址、密码或完整日志。

审核历史 ​

历史记录至少要展示事件时间、事件类型、曲目编号、操作者、理由/备注和状态。时间按带时区格式显示;客户端不要把不同来源的时间强行合并。

历史读取失败不应清空当前已显示的审核队列。可以标记历史暂时不可用,等待用户刷新。

互动数据隐私 ​

公开评论、成绩记录和互动统计可能被多人看到。展示前:

  • 不暴露 Token 和本地账号条目;
  • 处理用户主动填写的联系方式;
  • 不把私聊内容直接复制成公开评论;
  • 图片或附件先检查个人信息;
  • 删除/撤回后刷新视图,避免继续展示旧缓存。

互动错误矩阵 ​

现象第一动作第二动作
点赞按钮处理中等待当前请求超时后读取摘要
评论发送失败保留正文和错误检查 Token/长度/权限
评论重复出现刷新评论列表不再重发原文
回复挂错父评论读取最新评论树让用户重新选择父项
删除显示成功但仍可见重新读取检查是否缓存或权限
反馈没有进审核读取历史/状态不重复提交同一原因
审核结果不一致读取最新对象检查当前筛选和更新时间

客户端回归清单 ​

  • [ ] 空评论被本地拦截;
  • [ ] 长评论有明确提示;
  • [ ] 评论和回复按钮在提交中禁用;
  • [ ] 点赞/点踩以服务返回计数为准;
  • [ ] 删除有二次确认;
  • [ ] 超时不重放写入;
  • [ ] 普通账号看不到审核字段;
  • [ ] 审核账号的决定前会回读;
  • [ ] 公开日志不含评论请求体和 Token;
  • [ ] 页面切换后不会把旧响应写入新账号。

Released under the CC BY-NC-SA 4.0 License.