Edits no se guardan en la tabla user_actions

Acabo de darme cuenta de que o bien no entiendo completamente los casos en los que se crea una notificación de edición, o bien este es un problema mucho más generalizado de lo que pensaba.

Suposiciones principales

Si el Usuario A edita lo que escribió el Usuario B, ocurren varias cosas:

  • Se agrega una nueva fila a la tabla post_revisions.
  • Se agrega una nueva fila a la tabla user_actions con action_type = 11.
  • Al ir a /u/userB/notifications/edits, el Usuario B podrá ver que el Usuario A realizó una nueva edición (esto depende de user_actions).
  • Al hacer clic en el ícono del lápiz en su publicación, el Usuario B podrá ver la edición real que realizó el Usuario A (esto depende de post_revisions).

Prueba

Si las suposiciones anteriores son correctas, esta consulta debería mostrar todas las filas de la tabla post_revisions para las publicaciones creadas por el Usuario B (en este caso, id 259) que fueron editadas por cualquier usuario (distinto de él mismo o del usuario del sistema), junto con las filas correspondientes en user_actions para action_type = 11.

with my_user_posts as (
  select
    p.id,
    p.user_id
  from
    posts p
  where
    p.user_id = 259 -- elige un id de usuario
)
select
  up.user_id as my_user_id,
  ua.user_id as target_user_id,
  pr.post_id,
  ua.target_post_id,
  pr.user_id as editor_user_id,
  ua.acting_user_id,
  ua.action_type,
  pr.created_at as edit_created_at,
  ua.created_at as action_created_at
from
  post_revisions pr
  inner join my_user_posts up on up.id = pr.post_id
  and up.user_id != pr.user_id -- sin autoediciones
  and pr.user_id != -1 -- sin ediciones del sistema
  left join user_actions ua on ua.target_post_id = pr.post_id
  and ua.action_type = 11 -- solo acciones de EDICIÓN
order by
  pr.post_id,
  pr.created_at;

Resultado esperado

Cada fila tiene tanto los datos de post_revisions como los de user_actions.

Resultado real

Algunas de las filas de post_revisions no tienen datos coincidentes en user_actions. Por lo tanto, el usuario puede ver las revisiones haciendo clic en el lápiz de cada publicación, pero no recibió notificación de varias ediciones.

Cosas que he intentado

  • Agregar una edición adicional a una publicación antigua sin datos de user_action. Resultado: los datos de user_action tampoco aparecieron.
  • Crear un usuario falso, copiar el contenido previo a la edición de una publicación sin datos de user_action, crear una publicación con él y aplicar la misma edición que se realizó con otro usuario. Resultado: los datos de user_action aparecieron correctamente.
  • Repetir los procedimientos anteriores cuando el usuario está activo o desconectado. Resultado: sin cambios.
  • Repetir los procedimientos anteriores cambiando el período de gracia para las ediciones. Resultado: sin cambios.

Conclusiones

  • El problema no parece ser:

    • específico del usuario. Ocurre prácticamente con todos los usuarios.
    • específico de la conexión. El hecho de que el usuario esté activo o desconectado no cambia el resultado.
    • específico del tiempo. Cambiar el período de gracia para las ediciones no tuvo efecto.
  • El problema parece ser

    • específico de la acción. No he visto ningún problema al notificar ninguna de las otras acciones (LIKE, WAS_LIKED, RESPONSE, REPLY, MENTION o QUOTE). El único problema es con las acciones de EDICIÓN.

    • específico de la publicación. No ocurre en todas las publicaciones, solo en algunas específicas (parece ser aleatorio)

  • Una posibilidad es que algo esté ocurriendo durante la creación de publicaciones específicas que impide que se guarden las acciones de usuario de tipo EDICIÓN, pero no tengo idea de qué podría ser.

  • También es posible que esto esté ocurriendo por diseño y que existan condiciones específicas bajo las cuales los usuarios no son notificados de las ediciones, pero no he visto esto documentado en ningún lugar.

Próximos pasos

  • Si sabes una razón por la cual las notificaciones de edición podrían no activarse cada vez que se realiza una edición, por favor házmelo saber.
  • Si tienes tu propia instancia de Discourse, ¿podrías ejecutar la consulta SQL anterior en algunos de los ids de usuario para ver si también ves datos faltantes en user_actions y reportar los resultados?