Descrizione: Un utente mi ha chiesto di revocare il suo badge “First Like” dopo che lui stesso ha rimosso il “mi piace” da un post, ma il badge continuava a essere riassegnato. Il contesto si trova nel mio post precedente nella categoria di supporto.
Passaggi riproducibili:
- Crea un nuovo utente
- Metti “mi piace” a un post
- Ricevi il badge “First Like”
- Rimuovi il “mi piace” dal post
- Passa a un utente amministratore
- Vai al pannello di amministrazione dell’utente che ha messo “mi piace” al post
- Visita l’opzione “Modifica badge”
- Fai clic su “Revoca” sul badge “First Like”
- Aspetta un po’ (non sono sicuro di quando venga eseguito il processo di backfill per questo particolare badge, ma un giorno sarà sicuramente sufficiente. Forse prova ad attivare tutti i processi relativi ai badge in Sidekiq per accelerare?)
- Il badge viene automaticamente riassegnato all’utente, per lo stesso post a cui è stato rimosso il “mi piace” e alla stessa data in cui è stato effettuato il “mi piace”.
Ho ristretto il problema a questa riga della query SQL per l’assegnazione del badge, perché, mentre la riga in post_actions per l’azione “mi piace” esiste ancora dopo la rimozione del “mi piace”, la sua colonna deleted_at ha un valore di data, che la query non tiene in considerazione. Credo che la correzione per questo cambierebbe la clausola WHERE della sottoquery in:
WHERE post_action_type_id = 2 AND
pa.deleted_at IS NULL AND
(:backfill OR pa.post_id IN (:post_ids) )
ma non ho un ambiente di sviluppo configurato né molto tempo per testare questa correzione.
Priorità/Gravità: Ho risolto questo problema per me stesso eliminando già le righe post_actions pertinenti, e non ho mai ricevuto una richiesta simile prima. Immagino che questo non lo renda una priorità molto alta?