Descrição: Um usuário solicitou que eu revogasse seu distintivo “First Like” depois que ele mesmo descurtiu uma postagem, mas o distintivo continuou sendo concedido novamente. O contexto pode ser encontrado em minha postagem anterior na categoria de suporte.
Passos reproduzíveis:
- Crie um novo usuário
- Curta uma postagem
- Receba o distintivo “First Like”
- Descurta a postagem
- Mude para um usuário administrador
- Vá para o painel de administração do usuário que curtiu a postagem
- Visite a opção “Editar Distintivos”
- Clique em “Revogar” no distintivo “First Like”
- Espere um pouco (não tenho certeza de quando o trabalho de preenchimento é executado para este distintivo em particular, mas um dia certamente será suficiente. Talvez tentar acionar todos os trabalhos relacionados a distintivos no Sidekiq para acelerar?)
- O distintivo é concedido de volta ao usuário automaticamente, pela mesma postagem que foi descurtida e na mesma data em que o “like” foi feito.
Eu identifiquei o problema nesta linha da consulta SQL para conceder o distintivo, porque, embora a linha em post_actions para a ação de “like” ainda exista após descurtir, sua coluna deleted_at está definida com um valor de data, o que a consulta não leva em consideração. Acredito que a correção para isso mudaria a cláusula WHERE da subconsulta para:
WHERE post_action_type_id = 2 AND
pa.deleted_at IS NULL AND
(:backfill OR pa.post_id IN (:post_ids) )
mas não tenho um ambiente de desenvolvimento configurado ou muito tempo para testar essa correção.
Prioridade/Gravidade: Resolvi este problema para mim mesmo excluindo as linhas post_actions relevantes, e nunca recebi tal solicitação antes. Acho que isso não o torna uma prioridade muito alta?