Badge-Abfragen über die Tabelle "badge_posts" werden für nicht-öffentliche Kategorien nicht vergeben

Einer unserer Nutzer hatte 5 „Nice Reply"-Abzeichen (100 Beiträge geliked und 100 Likes vergeben). Anschließend haben wir einige Themen in eine private Kategorie verschoben, und nun besitzt er nur noch 3 Abzeichen. Es scheint, als würde die Abzeichenabfrage die Likes, die auf den verschobenen Themen gegeben oder erhalten wurden, nicht mehr zählen – vielleicht wegen der Verschiebung oder weil die Themen jetzt privat sind.

Beim Debuggen habe ich die Abzeichenabfrage in den Data Explorer kopiert:

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

Die obige Abfrage liefert für den Nutzer nur 3 Treffer, es sollten jedoch 5 sein. Mir ist aufgefallen, dass sie die Tabelle „badge_posts" verwendet. Ich kann die Tabelle „badge_posts" in der Baumansicht des Data Explorers nicht finden. Daher habe ich „badge_posts" in „posts" geändert, und dann werden erwartungsgemäß 5 Treffer zurückgegeben.

Woher kommt die Tabelle „badge_posts", und sollte die Abzeichenabfrage nicht stattdessen die Tabelle „posts" verwenden?

Diese Tabelle hat mich lange verwirrt. Sie ist hier definiert: discourse/lib/badge_posts_view_manager.rb at main · discourse/discourse · GitHub. Es handelt sich um eine Postgres-Sicht. Nach meinem Verständnis ist eine Sicht ein Name, der einer Abfrage zugewiesen wird.

Beiträge in der Sicht badge_posts sind sichtbare Beiträge, die sich nicht in kategorien mit Lesebeschränkungen befinden. Als Sie Ihre Themen in eine private Kategorie verschoben haben, wurden ihre Beiträge aus der Sicht badge_posts entfernt.

Unsere private Kategorie ist nicht wirklich privat – man muss lediglich eine Richtlinie akzeptieren, um Zugang zu erhalten. Daher möchte ich Beiträge aus dieser Kategorie einbeziehen. Ich vermute, ich müsste ein benutzerdefiniertes Abzeichen erstellen, das ähnlich aussieht wie „Gute Antwort