Questa guida spiega come creare query di badge personalizzate attivate in Discourse, inclusi i tipi di badge, i vincoli per i badge attivati e una query di esempio.
Livello utente richiesto: Amministratore
Questa funzionalità è disabilitata per impostazione predefinita. Per abilitarla, segui questa guida.
Quando si definiscono i badge in Discourse, si incontrerà un’opzione “Trigger” con le seguenti scelte:
- Aggiorna giornalmente
- Quando un utente agisce su un post
- Quando un utente modifica o crea un post
- Quando un utente cambia livello di fiducia
- Quando un utente viene modificato o creato
Questi trigger forzano l’esecuzione dei badge a intervalli più frequenti del giornaliero, assicurando che gli utenti vengano notificati dei nuovi badge più vicini al momento in cui l’azione è avvenuta.
Tipi di badge
Ci sono due tipi di badge che puoi definire:
- Badge che mirano ai post
- Badge che non mirano ai post
Tutte le definizioni SQL dei badge richiedono di selezionare le colonne
user_idegranted_at. Se il tuo badge mira ai post, devi anche selezionare una colonna denominatapost_id.
Se queste colonne non sono direttamente disponibili, puoi rinominarle (alias). Ad esempio:
u.id as user_idVincoli per i badge attivati
Poiché i badge attivati possono essere eseguiti una volta al minuto, è necessario fornire più “suggerimenti” nella definizione del badge. Non è sufficiente restituire l’intero set di badge; è necessario fornire anche suggerimenti su come eseguire il badge su un sottoinsieme.
Trigger basati sull’utente
Se il tuo trigger è basato sull’utente, fornisci una clausola su come filtrarlo in base a
:user_ids.Trigger basati sui post
Se il tuo trigger è basato sui post, fornisci informazioni su come attivarlo in base a
:post_ids.
Ricorda che un riempimento completo (full backfill) viene eseguito comunque giornalmente, quindi devi considerarlo e includere la gestione del parametro
:backfill.La tua query di badge attivata includerĂ sempre il parametro
:backfille o il parametro:post_idso il parametro:user_ids.Esempio di query di badge attivata
Ecco un esempio di un badge attivato “quando un utente agisce su un post”. In questo caso, le applicazioni “delta” riceveranno il parametro
: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) )La clausola
(:backfill OR p.id IN (:post_ids) )consente di filtrare i risultati. Quando viene eseguita l’attività giornaliera,:backfillè true, quindi viene scansionato l’intero set. Quando vengono eseguite le attività delta,:backfillè false e:post_idsè impostato.Perché è necessario il suggerimento manuale
La query di assegnazione del badge esegue la tua query del badge in una “sottoquery”. Spesso, l’ottimizzatore di PostgreSQL ha difficoltà quando esegue la scansione dell’intero set quando la clausola è sulla query principale. Sebbene possa gestire bene query banali, può fallire con aggregazioni più complesse.
Per evitare potenziali problemi, questo vincolo è stato aggiunto, consentendoti di applicare i filtri nella posizione più appropriata.
Hai bisogno di aiuto?
Se hai problemi a scrivere una query di badge, pubblica una domanda in Support descrivi cosa stai cercando di ottenere e includi il tuo lavoro in corso. La community cercherĂ di aiutare.
I trigger dei badge possono essere complessi. Spesso, gli aggiornamenti “giornalieri” sono sufficienti e puoi saltare gli aspetti più intricati delle query attivate.
38 Mi Piace
