카테고리에서 새 주제에 게시할 때마다 배지를 받을 수 있나요?

멤버들이 여러 번 획득할 수 있는 배지가 하나 있습니다. 바로 “Book Club” 배지인데요, 매월 선정된 책을 논의할 때 수여됩니다.

매달 다음 책에 대한 새 토픽이 생성되며, 해당 토픽에 답변하는 모든 사용자에게 배지를 지급해야 합니다. 현재는 수동으로 처리하고 있어 정말 번거롭습니다.

이 문제를 해결할 수 있는 배지 SQL을 작성하는 데 도움을 주실 수 있을까요?

사용자는 해당 토픽에 처음 게시글을 작성할 때 배지를 한 번만 받을 수 있어야 하며, 매번 동일한 배지를 여러 번 획득하는 방식입니다.

이것이 가능한가요? 감사합니다!

혹시 이 문제에 대해 도움을 주실 수 있나요? 아니면 배지 SQL을 만드는 방법에 대한 가이드가 어딘가에 있나요?

Topics tagged sql-triggered-badge? 를 읽어보셨나요?

네, 전부 읽어 보았습니다.

실제 운영 환경에서 제대로 작성되지 않은 SQL 쿼리를 실행하면 큰 문제가 생길 수 있어서, 아무렇게나 시도해 보는 것은 다소 부담스럽습니다.

테스트 모드나 비슷한 기능이 있을까요?

실험을 위해 스테이징 서버를 사용합니다.

이 문제로 더 진전이 있었나요?

북클럽 주제는 어떻게 정의되나요? 별도의 카테고리로 구분되어 있나요, 아니면 태그로 묶여 있나요?

더 이상 진행이 되지 않습니다. 여러 개의 부여 조건 때문에 막혀 있네요.

모든 주제가 동일한 카테고리에 속해 있습니다. 해당 카테고리는 잠겨 있어 스태프만 게시물을 생성할 수 있으므로, 카테고리 내 모든 답변에 자동으로 부여하는 것은 안전합니다.

하지만 저는 다음과 같이 설정하고 싶습니다:

  • 각 주제에서 각 사용자가 작성한 첫 번째 답변에 대해 배지를 부여하되, 주제당 단 한 번만
  • 사용자가 같은 카테고리의 다른 주제에 답변을 게시할 때마다 동일한 배지를 여러 개 받을 수 있도록

이런 방식으로 처리할 수 있을 것 같습니다:

WITH book_club_first_posts AS (

SELECT 
    p.topic_id,
    p.user_id,
    MIN(p.id) AS post_id
FROM posts p
  JOIN topics t ON t.id = p.topic_id
WHERE t.category_id = 5  -- 책 모임의 category_id로 교체하세요
    AND p.deleted_at ISNULL
    AND t.deleted_at ISNULL
    AND p.post_type = 1
    AND p.post_number <> 1
    AND p.user_id > 0
GROUP BY p.topic_id, p.user_id

)

SELECT bcfp.user_id, bcfp.post_id, p.created_at granted_at
FROM book_club_first_posts bcfp
  JOIN posts p ON p.id = bcfp.post_id
WHERE (:backfill OR p.id IN (:post_ids))

곧 시도해볼게요. 감사합니다.

완벽해요, 감사합니다!!