Descripción: Un usuario solicitó que revoque su insignia “Primer Me Gusta” después de que él mismo dejara de dar “Me Gusta” a una publicación, pero la insignia seguía siendo reotorgada. El contexto se puede encontrar en mi publicación anterior en la categoría de soporte.
Pasos reproducibles:
- Crear un nuevo usuario
- Dar “Me Gusta” a una publicación
- Recibir la insignia “Primer Me Gusta”
- Dejar de dar “Me Gusta” a la publicación
- Cambiar a un usuario administrador
- Ir al panel de administración del usuario que dio “Me Gusta” a la publicación
- Visitar la opción “Editar Insignias”
- Hacer clic en “Revocar” en la insignia “Primer Me Gusta”
- Esperar un poco (no estoy seguro de cuándo se ejecuta el trabajo de relleno para esta insignia en particular, pero un día seguramente será suficiente. ¿Quizás intentar activar todos los trabajos relacionados con insignias en Sidekiq para acelerarlo?)
- La insignia se otorga automáticamente de nuevo al usuario, por la misma publicación a la que se dejó de dar “Me Gusta” y en la misma fecha en que se dio el “Me Gusta”.
He reducido el problema a esta línea de la consulta SQL para otorgar la insignia, porque, si bien la fila en post_actions para la acción de “Me Gusta” todavía existe después de dejar de dar “Me Gusta”, su columna deleted_at tiene un valor de fecha, que la consulta no tiene en cuenta. Creo que la solución para esto cambiaría la cláusula WHERE de la subconsulta a:
WHERE post_action_type_id = 2 AND
pa.deleted_at IS NULL AND
(:backfill OR pa.post_id IN (:post_ids) )
pero no tengo un entorno de desarrollo configurado ni mucho tiempo para probar esta solución yo mismo.
Prioridad/Severidad: He resuelto este problema para mí mismo eliminando las filas post_actions relevantes, y nunca antes había recibido tal solicitud. Supongo que eso no lo convierte en una prioridad muy alta.