커스텀 규칙으로 커스텀 배지 만들기

아래 규칙들을 포함하는 커스텀 배지를 만들고 싶습니다. 즉, 사용자가 아래 사항들을 완료하면 해당 배지가 자동으로 지급되는 방식입니다.
사용자가 완료해야 할 사항/규칙은 다음과 같습니다 -

  1. 사용자가 최소 2개의 게시물을 작성해야 합니다
  2. 사용자가 프로필 사진을 업로드해야 합니다
  3. 사용자가 최소 1개의 게시물에 좋아요를 눌러야 합니다

참고 - SQL 쿼리를 이용해 배지를 생성하는 방법을 본 적이 있습니다. 이 분야에 매우 초보자인데, 위 규칙들을 구현하기 위해 SQL 쿼리(필요한 경우)를 어디에 넣어야 하는지 친절하게 알려주시면 감사하겠습니다.

도움이 될까요?

안녕하세요, 정말 도움이 많이 됩니다.
SQL 쿼리 옵션을 활성화했는데, 그 이후에 작은 부분에서 막혀 있어요. 그거만 해결하면 바로 진행할 수 있을 것 같아요.

커스텀 배지 규칙이 복잡해서 몇 가지 정보가 필요합니다.

  1. 제 자체 쿼리를 만들 수 있도록 데이터베이스를 확인하는 방법
  2. 쿼리를 작성한 후 배지를 테스트하는 방법

이 두 가지에 대해 답변해 주시면 편하게 잘 수 있을 것 같아요.

가장 쉬운 방법은 discourse-data-explorer 플러그인을 설치하는 것입니다. 이 플러그인은 다음과 같은 인터페이스를 제공합니다.

플러그인을 설치하고 아래 SQL 명령어를 작성하여 이 세 가지 조건을 충족하는 사용자를 조회할 수는 있지만, 사용자가 게시물에 대한 행동을 취할 때 이를 트리거로 변환하는 방법을 모르겠습니다.

SQL 명령어 -
select users.username, user_stats.user_id from user_stats Inner Join users ON user_stats.user_id = users.id where post_count = 2 AND likes_given = 1 AND uploaded_avatar_id > 0

이 게시물(Creating triggered custom badge queries)을 참고하고 있지만, Discourse에 정말 초보자인 관계로 아직 만들지 못하고 있습니다.

이 문제를 해결해 주시면, 이후에는 다른 맞춤형 배지들도 훨씬 쉽게 만들 수 있을 것 같습니다.
@Lhc_fl

이것은 "트리거: 일일 업데이트"의 SQL 코드입니다.

SELECT st.user_id user_id, current_timestamp granted_at
FROM user_stats st
JOIN users u
ON st.user_id = u.id
WHERE st.post_count >= 2 AND st.likes_given >= 1 AND u.uploaded_avatar_id > 0

다른 트리거들은 특정 사항에 의존하므로, SQL 전문가를 찾지 않는 한 사용을 권장하지 않습니다. (저 역시 SQL에 익숙하지 않습니다)

이 점에 대해 정말 감사합니다. 기본적인 질문이 세 가지 있습니다.

  1. st와 u 테이블은 무엇이며, 이 두 테이블의 용도는 무엇인가요? 그리고 왜 이 테이블들이 탐색기(Explorer) 플러그인 탭에서 보이지 않나요?

  2. 이 트리거가 매일 업데이트될 때, 구체적으로 어떤 시간에 실행되는지 알고 싶습니다.

  3. Run revocation query daily(매일 폐기 쿼리 실행)의 용도는 무엇인가요?

1번에 대해 말씀드리자면, 그것은 테이블 별칭 이름입니다.

FROM user_stats st라는 줄을 보셨나요? 이 줄은 쿼리에서 st가 user_stats 테이블의 줄임말임을 알려줍니다.

JOIN 문에서 users u라고 쓰인 부분도 마찬가지입니다. 해당 쿼리에서 u가 users 테이블의 별칭임을 나타냅니다. 별칭은 쿼리를 더 간결하게 작성하고 타이핑을 줄여 오류 가능성을 낮추기 위해 사용됩니다.

3번에 대해 말씀드리자면, 해당 옵션을 활성화하면 사용자가 쿼리에 따라 더 이상 배지를 받을 자격이 없게 되면 해당 배지가 계정에서 제거됩니다.

의문점을 명확히 해 주셔서 감사합니다. 이제 두 번째 항목만 남았습니다.

  1. 이 트리거가 매일 실행되는 시점에 대해, 구체적으로 시간을 묻고 있습니다.

아, 실수했네요. 이미 답을 했나 보네요.

이 쿼리는 컨테이너를 시작한 시각에 따라 24시간 주기로 실행됩니다. 그래서 한 인스턴스는 대략 0:00 UTC경에 실행되고, 다른 인스턴스는 6:00 UTC 직후에 실행되도록 설정해 두었습니다.

이 쿼리가 실행되는 시점을 변경할 수 있나요? 아니면 쿼리를 Trigger: when user acts on a posts 또는 user edits or creates a post로 수정할 수 있나요?
가능하다면 쿼리를 변경해 주시겠어요? 저는 이 discourse 시스템에 처음이라서요. 이번 한 번만 도와주시면, 다음부터는 제가 직접 커스텀 배지를 만들 수 있을 것 같습니다.