Le query sui badge che utilizzano la tabella "badge_posts" non vengono assegnate per le categorie non pubbliche

Uno dei nostri utenti aveva 5 distintivi “Risposta gradita” (ha ricevuto 100 like e ne ha inviati 100). Poi abbiamo spostato alcuni argomenti in una categoria privata e ora ne ha solo 3. Sembra che la query dei distintivi non conti i like ricevuti o inviati sugli argomenti spostati, forse perché sono stati spostati o forse perché ora sono privati.

Nel debug di questo problema, ho copiato la query dei distintivi in Data Explorer:

select p.user_id, p.id post_id, current_timestamp granted_at
from badge_posts p
where p.post_number > 1
and p.like_count >= 10

La query sopra restituisce solo 3 risultati per l’utente, ma dovrebbero essere 5. Ho notato che utilizza la tabella “badge_posts”. Non riesco a trovare la tabella badge_posts nella visualizzazione ad albero di Data Explorer. Quindi ho sostituito “badge_posts” con “posts” e ora restituisce 5 come previsto.

Da dove proviene la tabella “badge_posts” e la query dei distintivi non dovrebbe utilizzare invece la tabella “posts”?

Quella tabella mi ha confuso per molto tempo. È definita qui: discourse/lib/badge_posts_view_manager.rb at main · discourse/discourse · GitHub. Si tratta di una vista postgres. La mia comprensione di una vista è che sia un nome assegnato a una query.

I post nella vista badge_posts sono post visibili che non si trovano in categorie con restrizioni di lettura. Quando hai spostato i tuoi argomenti in una categoria privata, hai rimosso i loro post dalla vista badge_posts.

La nostra categoria privata non è poi così privata: devi semplicemente accettare una policy per accedere. Quindi vorrei includere i post di quella categoria. Immagino che dovrò creare un badge personalizzato simile a “Nice Reply” (e “Good Reply” e “Great Reply”), ma che utilizzi i post invece di “badge_posts”.