Description : Un utilisateur m’a demandé de révoquer son badge « First Like » après qu’il ait lui-même retiré son « j’aime » d’une publication, mais le badge continuait d’être réattribué. Le contexte se trouve dans ma publication précédente dans la catégorie support.
Étapes reproductibles :
- Créer un nouvel utilisateur
- Liker une publication
- Recevoir le badge « First Like »
- Retirer son « j’aime » de la publication
- Basculer vers un utilisateur administrateur
- Accéder au panneau d’administration de l’utilisateur qui a liké la publication
- Visiter l’option « Modifier les badges »
- Cliquer sur « Révoquer » pour le badge « First Like »
- Attendre un peu (je ne suis pas sûr quand le travail de remplissage s’exécute pour ce badge particulier, mais une journée suffira sûrement. Peut-être essayer de déclencher tous les travaux liés aux badges dans Sidekiq pour accélérer le processus ?)
- Le badge est automatiquement réattribué à l’utilisateur, pour la même publication qui a été “dislikée” et à la même date que le like a été effectué.
J’ai identifié le problème à cette ligne de la requête SQL pour l’attribution du badge, car, bien que la ligne dans post_actions pour l’action de like existe toujours après avoir retiré le like, sa colonne deleted_at est définie avec une valeur de date, que la requête ne prend pas en compte. Je pense que la correction pour cela modifierait la clause WHERE de la sous-requête en :
WHERE post_action_type_id = 2 AND
pa.deleted_at IS NULL AND
(:backfill OR pa.post_id IN (:post_ids) )
mais je n’ai pas d’environnement de développement configuré ni beaucoup de temps pour tester moi-même cette correction.
Priorité/Sévérité : J’ai résolu ce problème pour moi-même en supprimant déjà les lignes post_actions pertinentes, et je n’ai jamais reçu une telle demande auparavant. Je suppose que cela ne le rend pas très prioritaire ?