描述: 用户要求我撤销他们的“首次点赞”徽章,因为他们自己取消了对帖子的点赞,但徽章却被重新授予。相关背景信息可以在支持类别下的我之前的帖子中找到。
可重现步骤:
- 创建一个新用户
- 点赞一个帖子
- 收到“首次点赞”徽章
- 取消点赞帖子
- 切换到管理员用户
- 转到点赞帖子的用户的管理员面板
- 访问“编辑徽章”选项
- 点击“首次点赞”徽章上的“撤销”
- 等待一段时间(我不确定这个特定徽章的回填作业何时运行,但一天肯定够了。也许可以尝试触发 Sidekiq 中所有与徽章相关的作业来加快速度?)
- 徽章会自动重新授予给用户,针对的是被取消点赞的同一个帖子,以及点赞发生的同一日期。
我已经将问题缩小到 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 行解决了这个问题,而且我以前从未收到过此类请求。我想这不会使其成为一个非常高优先级的任务?