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_actionsconaction_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 deuser_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 deuser_actiontampoco 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 deuser_actionaparecieron 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_actionsy reportar los resultados?
