Mir ist gerade aufgefallen, dass ich entweder die Fälle, in denen eine Bearbeitungsmeldung erstellt wird, nicht vollständig verstehe, oder dass dies ein weit verbreitetes Problem ist, das ich unterschätzt habe.
Hauptannahmen
Wenn Benutzer A etwas bearbeitet, das Benutzer B geschrieben hat, passieren mehrere Dinge:
- Eine neue Zeile wird in der Tabelle
post_revisionshinzugefügt. - Eine neue Zeile wird in der Tabelle
user_actionsmitaction_type = 11hinzugefügt. - Unter
/u/userB/notifications/editskann Benutzer B sehen, dass Benutzer A eine neue Bearbeitung vorgenommen hat (dies hängt vonuser_actionsab). - Wenn Benutzer B auf das Stiftsymbol in seinem Beitrag klickt, kann er die tatsächliche Bearbeitung sehen, die Benutzer A vorgenommen hat (dies hängt von
post_revisionsab).
Test
Wenn die oben genannten Annahmen korrekt sind, sollte diese Abfrage alle Zeilen in der Tabelle post_revisions für Beiträge anzeigen, die von Benutzer B (in diesem Fall ID 259) erstellt wurden und von einem beliebigen Benutzer (außer sich selbst oder dem Systembenutzer) bearbeitet wurden, zusammen mit den entsprechenden Zeilen in user_actions für action_type = 11.
with my_user_posts as (
select
p.id,
p.user_id
from
posts p
where
p.user_id = 259 -- eine Benutzer-ID auswählen
)
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 -- keine Selbstbearbeitungen
and pr.user_id != -1 -- keine Systembearbeitungen
left join user_actions ua on ua.target_post_id = pr.post_id
and ua.action_type = 11 -- nur BEARBEITEN-Aktionen
order by
pr.post_id,
pr.created_at;
Erwartete Ausgabe
Jede Zeile enthält sowohl post_revisions-Daten als auch user_actions-Daten.
Tatsächliche Ausgabe
Einige der post_revisions-Zeilen haben keine passenden user_actions-Daten. Daher kann der Benutzer die Revisionen sehen, indem er auf den Stift in jedem Beitrag klickt, wurde jedoch nicht über mehrere empfangene Bearbeitungen benachrichtigt.
Versuchte Maßnahmen
- Hinzufügen einer zusätzlichen Bearbeitung an einem alten Beitrag ohne
user_action-Daten. Ergebnis: Dieuser_action-Daten erschienen ebenfalls nicht. - Erstellen eines gefälschten Benutzers, Kopieren des Inhalts vor der Bearbeitung eines Beitrags ohne
user_action-Daten, Erstellen eines Beitrags damit und Anwenden derselben Bearbeitung, die von einem anderen Benutzer durchgeführt wurde. Ergebnis: Dieuser_action-Daten wurden korrekt angezeigt. - Wiederholen der oben genannten Verfahren, wenn der Benutzer aktiv oder offline ist. Ergebnis: Keine Änderung.
- Wiederholen der oben genannten Verfahren unter Änderung der Bearbeitungsfrist. Ergebnis: Keine Änderung.
Schlussfolgerungen
-
Das Problem scheint nicht zu sein:
- benutzerspezifisch. Es tritt bei praktisch jedem Benutzer auf.
- verbindungspezifisch. Der Umstand, ob der Benutzer aktiv oder offline ist, ändert die Ausgabe nicht.
- zeitspezifisch. Die Änderung der Bearbeitungsfrist hatte keine Auswirkung.
-
Das Problem scheint zu sein:
-
aktionsspezifisch. Ich habe keine Probleme bei der Benachrichtigung über andere Aktionen (LIKE, WAS_LIKED, RESPONSE, REPLY, MENTION oder QUOTE) festgestellt. Das einzige Problem betrifft BEARBEITEN-Aktionen.
-
beitragspezifisch. Es tritt nicht bei jedem Beitrag auf, sondern nur bei bestimmten (scheinbar zufälligen) Beiträgen.
-
-
Eine Möglichkeit ist, dass während der Erstellung bestimmter Beiträge etwas passiert, das verhindert, dass BEARBEITEN-
user_actionsgespeichert werden, aber ich habe keine Ahnung, was das sein könnte. -
Es ist auch möglich, dass dies absichtlich so gestaltet ist und dass es bestimmte Bedingungen gibt, unter denen Benutzer nicht über Bearbeitungen benachrichtigt werden, aber ich habe dies nirgendwo dokumentiert gefunden.
Nächste Schritte
- Wenn Sie einen Grund wissen, warum Bearbeitungsmeldungen nicht jedes Mal ausgelöst werden, wenn eine Bearbeitung erfolgt, lassen Sie es mich bitte wissen.
- Wenn Sie eine eigene Discourse-Instanz haben, könnten Sie die oben genannte SQL-Abfrage auf einigen Ihrer Benutzer-IDs ausführen, um zu prüfen, ob Sie ebenfalls fehlende
user_actions-Daten sehen, und mir Rückmeldung geben?
