Les modifications ne sont pas enregistrées dans la table user_actions

Je viens de réaliser que soit je ne comprends pas complètement les cas où une notification d’édition est créée, soit c’est un problème beaucoup plus répandu que je ne le pensais.

Hypothèses principales

Si l’utilisateur A modifie ce que l’utilisateur B a écrit, plusieurs choses se produisent :

  • Une nouvelle ligne est ajoutée à la table post_revisions.
  • Une nouvelle ligne est ajoutée à la table user_actions avec action_type = 11.
  • En accédant à /u/userB/notifications/edits, l’utilisateur B pourra voir qu’une nouvelle édition a été effectuée par l’utilisateur A (cela dépend de user_actions).
  • En cliquant sur l’icône de crayon dans son message, l’utilisateur B pourra voir la modification réelle effectuée par l’utilisateur A (cela dépend de post_revisions).

Test

Si les hypothèses ci-dessus sont correctes, cette requête devrait afficher toutes les lignes de la table post_revisions pour les messages créés par l’utilisateur B (dans ce cas, l’identifiant 259) qui ont été modifiés par n’importe quel utilisateur (autre que lui-même ou l’utilisateur système), ainsi que les lignes correspondantes dans user_actions pour action_type = 11.

with my_user_posts as (
  select
    p.id,
    p.user_id
  from
    posts p
  where
    p.user_id = 259 -- choisissez un identifiant d'utilisateur
)
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 -- pas d'auto-modifications
  and pr.user_id != -1 -- pas de modifications système
  left join user_actions ua on ua.target_post_id = pr.post_id
  and ua.action_type = 11 -- uniquement les actions ÉDITION
order by
  pr.post_id,
  pr.created_at;

Résultat attendu

Chaque ligne contient à la fois les données de post_revisions et les données de user_actions.

Résultat réel

Certaines lignes de post_revisions ne correspondent à aucune donnée dans user_actions. Par conséquent, l’utilisateur peut voir les révisions en cliquant sur le crayon dans chaque message, mais n’a pas été informé de recevoir plusieurs modifications.

Actions que j’ai tentées

  • Ajouter une modification supplémentaire à un ancien message sans données user_action. Résultat : les données user_action n’apparaissent toujours pas.
  • Créer un faux utilisateur, copier le contenu avant modification d’un message sans données user_action, créer un nouveau message avec ce contenu et appliquer la même modification qu’avec un autre utilisateur. Résultat : les données user_action apparaissent correctement.
  • Répéter les procédures ci-dessus lorsque l’utilisateur est actif ou hors ligne. Résultat : aucune modification.
  • Répéter les procédures ci-dessus en modifiant la période de grâce pour les modifications. Résultat : aucune modification.

Conclusions

  • Le problème ne semble pas être :

    • spécifique à l’utilisateur. Il survient pratiquement pour chaque utilisateur.
    • spécifique à la connexion. Le fait que l’utilisateur soit actif ou hors ligne ne modifie pas le résultat.
    • spécifique au temps. Modifier la période de grâce pour les modifications n’a eu aucun effet.
  • Le problème semble être :

    • spécifique à l’action. Je n’ai constaté aucun problème de notification pour les autres actions (LIKE, WAS_LIKED, RESPONSE, REPLY, MENTION ou QUOTE). Le seul problème concerne les actions ÉDITION.

    • spécifique au message. Cela ne se produit pas pour tous les messages, seulement pour certains (apparemment de manière aléatoire).

  • Une possibilité est que quelque chose se produise lors de la création de certains messages et empêche l’enregistrement des actions user_actions de type ÉDITION, mais je ne sais pas ce que cela pourrait être.

  • Il est également possible que cela soit prévu par conception et qu’il existe des conditions spécifiques dans lesquelles les utilisateurs ne sont pas informés des modifications, mais je n’ai trouvé aucune documentation à ce sujet.

Étapes suivantes

  • Si vous connaissez une raison pour laquelle les notifications de modification ne sont pas déclenchées à chaque modification, veuillez me le faire savoir.
  • Si vous disposez de votre propre instance Discourse, pourriez-vous exécuter la requête SQL ci-dessus sur certains de vos identifiants d’utilisateur pour vérifier si vous observez également des données manquantes dans user_actions et me faire un retour ?