Diese Anleitung erklärt, wie man ausgelöste benutzerdefinierte Abzeichenabfragen in Discourse erstellt, einschließlich der Arten von Abzeichen, Einschränkungen für ausgelöste Abzeichen und einer Beispielabfrage.
Erforderlicher Benutzerlevel: Administrator
Diese Funktion ist standardmäßig deaktiviert. Um sie zu aktivieren, folgen Sie dieser Anleitung.
Bei der Definition von Abzeichen in Discourse stoßen Sie auf eine „Trigger“-Option mit den folgenden Auswahlmöglichkeiten:
- Täglich aktualisieren
- Wenn ein Benutzer auf einen Beitrag reagiert
- Wenn ein Benutzer einen Beitrag bearbeitet oder erstellt
- Wenn ein Benutzer den Vertrauenslevel ändert
- Wenn ein Benutzer bearbeitet oder erstellt wird
Diese Trigger erzwingen, dass Abzeichen häufiger als täglich ausgeführt werden, wodurch sichergestellt wird, dass Benutzer über neue Abzeichen näher an dem Zeitpunkt benachrichtigt werden, zu dem die Aktion stattgefunden hat.
Arten von Abzeichen
Es gibt zwei Arten von Abzeichen, die Sie definieren können:
- Abzeichen, die auf Beiträge abzielen
- Abzeichen, die nicht auf Beiträge abzielen
Alle SQL-Definitionen für Abzeichen erfordern, dass Sie die Spalten
user_idundgranted_atauswählen. Wenn Ihr Abzeichen auf Beiträge abzielt, müssen Sie außerdem eine Spalte namenspost_idauswählen.
Wenn diese Spalten nicht direkt verfügbar sind, können Sie ihnen einen Alias zuweisen. Zum Beispiel:
u.id as user_idEinschränkungen für ausgelöste Abzeichen
Da ausgelöste Abzeichen einmal pro Minute ausgeführt werden können, müssen Sie mehr „Hinweise“ in der Abzeichendefinition geben. Es reicht nicht aus, den vollständigen Satz von Abzeichen zurückzugeben; Sie müssen auch Hinweise dazu geben, wie das Abzeichen für eine Teilmenge ausgeführt werden soll.
Benutzerbasierte Trigger
Wenn Ihr Trigger benutzerbasiert ist, geben Sie eine Klausel an, wie er basierend auf
:user_idsgefiltert werden soll.Beitragsbasierte Trigger
Wenn Ihr Trigger beitragsbasiert ist, geben Sie Informationen darüber an, wie er basierend auf
:post_idsausgelöst werden soll.
Denken Sie daran, dass eine vollständige Wiederherstellung (Backfill) täglich unabhängig davon ausgeführt wird. Sie müssen dies berücksichtigen und die Behandlung des Parameters
:backfilleinbeziehen.Ihre ausgelöste Abzeichenabfrage enthält immer den Parameter
:backfillund entweder den Parameter:post_idsoder:user_ids.Beispiel für eine ausgelöste Abzeichenabfrage
Hier ist ein Beispiel für ein Abzeichen, das ausgelöst wird, „wenn ein Benutzer auf einen Beitrag reagiert“. In diesem Fall erhalten „Delta“-Anwendungen den Parameter
:post_ids:SELECT p.user_id, p.id post_id, p.updated_at granted_at FROM badge_posts p WHERE p.like_count >= 25 AND (:backfill OR p.id IN (:post_ids) )Die Klausel
(:backfill OR p.id IN (:post_ids) )ermöglicht die Filterung der Ergebnisse. Wenn der tägliche Job ausgeführt wird, ist:backfillwahr, sodass der gesamte Satz gescannt wird. Wenn Delta-Jobs ausgeführt werden, ist:backfillfalsch und:post_idswird gesetzt.Warum manuelle Hinweise notwendig sind
Die Abzeichenzuweisungsabfrage führt Ihre Abzeichenabfrage in einer „Unterabfrage“ aus. Oft hat der PostgreSQL-Optimierer Schwierigkeiten beim Scannen der vollständigen Menge, wenn sich die Klausel in der Hauptabfrage befindet. Obwohl er einfache Abfragen gut verarbeiten kann, kann er bei komplexeren Aggregationen versagen.
Um potenzielle Probleme zu vermeiden, wurde diese Einschränkung hinzugefügt, die es Ihnen ermöglicht, Filter an der am besten geeigneten Stelle anzuwenden.
Hilfe benötigt?
Wenn Sie Schwierigkeiten beim Schreiben einer Abzeichenabfrage haben, stellen Sie eine Frage in Support – beschreiben Sie, was Sie erreichen möchten, und fügen Sie Ihre laufende Arbeit bei. Die Community wird versuchen zu helfen.
Abzeichentrigger können komplex sein. Oftmals reichen „tägliche“ Aktualisierungen aus, und Sie können die komplizierteren Aspekte ausgelöster Abfragen überspringen.
38 „Gefällt mir“
