“badge_posts” 테이블을 사용한 배지 쿼리는 비공개 카테고리에서 부여되지 않습니다

우리 사용자 중 한 명이 5개의 “좋은 답변” 배지(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” 테이블을 사용한다는 것을 알게 되었습니다. Data Explorer의 트리 뷰에서 badge_posts 테이블을 찾을 수 없습니다. 그래서 "badge_posts"를 "posts"로 변경했는데, 그랬더니 예상대로 5개가 반환되었습니다.

“badge_posts” 테이블은 어디에서 오는 것이며, 배지 쿼리는 대신 “posts” 테이블을 사용해야 하는 것 아닙니까?

해당 테이블이 오랫동안 저를 혼란스럽게 했습니다. 이 테이블은 여기에서 정의되어 있습니다: discourse/lib/badge_posts_view_manager.rb at main · discourse/discourse · GitHub. 이것은 postgres 뷰입니다. 제 이해에 따르면, 뷰는 쿼리에 부여된 이름입니다.

badge_posts 뷰에 있는 게시물은 읽기 제한 카테고리에 있지 않은 가시적인 게시물입니다. 토픽을 비공개 카테고리로 이동했을 때, 해당 토픽의 게시물들이 badge_posts 뷰에서 제거되었습니다.

우리의 비공개 카테고리는 그렇게 비공개가 아닙니다. 정책을 수락하기만 하면 접근할 수 있거든요. 그래서 저는 해당 카테고리의 게시물을 포함하고 싶습니다. Nice Reply(그리고 Good Reply와 Great Reply)와 비슷한 모양의 사용자 지정 배지를 만들어야 할 것 같은데, badge_posts 대신 posts를 사용해야 할 것 같습니다.