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_actionsavecaction_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 deuser_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éesuser_actionn’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éesuser_actionapparaissent 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_actionsde 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_actionset me faire un retour ?
