説明: ユーザーが投稿の「いいね」を取り消したにもかかわらず、First Likeバッジが再付与され続けるため、First Likeバッジの取り消しをリクエストされました。詳細は以前の投稿のサポートカテゴリにあります。
再現手順:
- 新しいユーザーを作成する
- 投稿に「いいね」する
- First Likeバッジを受け取る
- 投稿の「いいね」を取り消す
- 管理者ユーザーに切り替える
- 「いいね」したユーザーの管理者パネルに移動する
- バッジの編集オプションにアクセスする
- First Likeバッジの「取り消す」をクリックする
- 少し待つ(この特定のバッジのバックフィルジョブがいつ実行されるかは不明ですが、1日あれば確実に実行されるでしょう。バッジ関連のすべてのジョブを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行を既に削除することで、この問題は自分で解決しました。このようなリクエストを受けたのは初めてです。それほど高い優先度ではないと思われますか?