Запросы бейджей с использованием таблицы "badge_posts" не начисляются для непубличных категорий

Один из наших пользователей имел 5 значков «Nice Reply» (лайкнул 100 постов и получил 100 лайков). Затем мы переместили некоторые темы в приватную категорию, и теперь у него осталось только 3 значка. Похоже, запрос для значков не учитывает лайки, полученные или отданные на перемещённых темах — возможно, из-за самого перемещения или потому что темы теперь приватные.

При отладке я скопировал запрос для значков в 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

Вышеуказанный запрос возвращает только 3 совпадения для этого пользователя, хотя должно быть 5. Я заметил, что он использует таблицу «badge_posts». Я не могу найти таблицу badge_posts в дереве просмотра Data Explorer. Поэтому я заменил «badge_posts» на «posts», и тогда запрос вернул 5, как и ожидалось.

Откуда берётся таблица «badge_posts» и не должен ли запрос для значков использовать таблицу «posts» вместо неё?

Эта таблица долгое время сбивала меня с толку. Она определена здесь: discourse/lib/badge_posts_view_manager.rb at main · discourse/discourse · GitHub. Это представление в PostgreSQL. Как я понимаю, представление — это имя, присвоенное запросу.

Записи в представлении badge_posts — это видимые записи, которые не находятся в категориях с ограниченным доступом к чтению. Когда вы переместили свои темы в приватную категорию, вы исключили их записи из представления badge_posts.

Наша приватная категория не совсем приватна — вам просто нужно принять политику, чтобы получить доступ. Поэтому я хотел бы включить посты из этой категории. Похоже, мне нужно создать пользовательский значок, похожий на «Хороший ответ» (и «Отличный ответ» и «Великолепный ответ»), но использующий посты вместо badge_posts.