第一个“点赞”徽章无法移除

描述: 用户要求我撤销他们的“首次点赞”徽章,因为他们自己取消了对帖子的点赞,但徽章却被重新授予。相关背景信息可以在支持类别下的我之前的帖子中找到。

可重现步骤:

  1. 创建一个新用户
  2. 点赞一个帖子
  3. 收到“首次点赞”徽章
  4. 取消点赞帖子
  5. 切换到管理员用户
  6. 转到点赞帖子的用户的管理员面板
  7. 访问“编辑徽章”选项
  8. 点击“首次点赞”徽章上的“撤销”
  9. 等待一段时间(我不确定这个特定徽章的回填作业何时运行,但一天肯定够了。也许可以尝试触发 Sidekiq 中所有与徽章相关的作业来加快速度?)
  10. 徽章会自动重新授予给用户,针对的是被取消点赞的同一个帖子,以及点赞发生的同一日期。

我已经将问题缩小到 SQL 查询中授予徽章的这一行,因为虽然取消点赞后 post_actions 表中点赞操作的行仍然存在,但其 deleted_at 列被设置为一个日期值,而查询没有考虑到这一点。我认为修复方法是将子查询的 WHERE 子句更改为:

      WHERE post_action_type_id = 2 AND
        pa.deleted_at IS NULL AND
        (:backfill OR pa.post_id IN (:post_ids) )

但我没有设置开发环境,也没有太多时间自己测试这个修复方法。

优先级/严重性: 我已经通过删除相关的 post_actions 行解决了这个问题,而且我以前从未收到过此类请求。我想这不会使其成为一个非常高优先级的任务?

2 个赞

他们点赞了一个帖子。取消点赞并不能改变他们已经证明了自己知道如何点赞的事实。也许他们有资格获得“首次取消点赞”徽章,但既然他们已经点赞了一个帖子,他们就点赞了一个帖子。他们因为点赞了帖子而获得徽章。你无法收回已说出的话。

这也是我的猜测。

你的解决方案非常巧妙。另一种移除他们徽章的方法是删除该用户。:rofl:

2 个赞

这是真的,但我仍然认为,作为管理员,我无法撤销该用户的徽章,即使他们取消了点赞,这是违反直觉的。至少在“编辑徽章”视图的“撤销”按钮上应该有一些关于徽章无法撤销的提示?而不是像现在这样,在某个回填作业中默默地重新授予徽章,让管理员怀疑他们是否真的点击了那个按钮。

2 个赞

同意。

我想我的回应会是这样的:

抱歉,戴夫。恐怕我不能这么做。

3 个赞

已将其移至功能,我认为功能请求是:

使能够 100% 撤销重新评估的徽章
或者
禁止管理员撤销基于 SQL 的徽章/定期评估徽章


目前我的建议是“不要这样做”,但管理员的体验肯定可以更好。

1 个赞