반응(Reactions)을 이용해 배지 부여하기

제가 직접 만져본 것이 하나 있긴 하지만, 새로운 시각으로 다시 보기 위해 잠시 제쳐두고 아직 다시 손대지 못했기 때문에 아직 다듬어야 할 부분이 있을 수 있습니다. #data-reporting 카테고리에서 ‘data-team’ 그룹의 멤버가 :chefs_kiss: 리액션을 남긴 게시글이 최소 10개 이상인 사용자에게 배지를 수여하는 것입니다:

SELECT p.user_id, MIN(p.created_at) granted_at
FROM badge_posts p
  JOIN topic_tags tt ON tt.topic_id = p.topic_id
WHERE tt.tag_id = 615
  AND EXISTS (
         SELECT 1
            FROM discourse_reactions_reactions dr 
             JOIN discourse_reactions_reaction_users dru ON dr.id = dru.reaction_id
             JOIN group_users gu ON gu.user_id = dru.user_id
            WHERE dr.post_id = p.id
              AND dr.reaction_value = 'chefs_kiss'
              AND gu.group_id = 175
       )
 GROUP BY p.user_id
HAVING COUNT(*) >= 10

다만, MIN을 사용했더니 수여 날짜가 잘못 계산되는 문제가 있어서 마음에 들지 않았습니다.

조건이 매우 많고 자동 처리되므로 다소 복잡한 편에 속한다고 생각합니다. 더 간단한 로직이라면 훨씬 적은 노력으로 구현할 수 있을 것 같습니다.