이것은 수락되지 않은 정책에 대한 대시보드 보고서의 SQL 버전입니다.
이 보고서는 Discourse Policy 플러그인이 활성화되어 있어야 합니다.
이 대시보드 보고서는 특정 사용자가 수락하지 않은 정책을 가진 주제들을 식별합니다. 이 보고서는 관리자가 사용자가 게시 정책에 준수하는지 확인하고, 필수 정책을 수락하지 않은 사용자를 식별하며, 포럼 규칙을 강제하고, 정책 업데이트를 관리하고, 사용자가 가이드라인에 동의했는지 확인하는 데 도움이 됩니다.
SELECT distinct t.id AS topic_id, gu.user_id AS user_id
FROM post_policies pp
JOIN post_policy_groups pg on pg.post_policy_id = pp.id
JOIN posts p ON p.id = pp.post_id AND p.deleted_at is null
JOIN topics t ON t.id = p.topic_id AND t.deleted_at is null
JOIN group_users gu ON gu.group_id = pg.group_id
LEFT JOIN policy_users pu ON
pu.user_id = gu.user_id AND
pu.post_policy_id = pp.id AND
pu.accepted_at IS NOT NULL AND
pu.revoked_at IS NULL AND
(pu.expired_at IS NULL OR pu.expired_at < pu.accepted_at) AND
((pu.version IS NULL AND pp.version IS NULL) OR
(pp.version IS NOT NULL AND pu.version IS NOT NULL AND pu.version = pp.version))
WHERE pu.id IS NULL
SQL 쿼리 설명
이 쿼리는 다음 작업을 수행합니다:
post_policies,post_policy_groups,posts,topics,group_users테이블을 조인하여 그룹 멤버십에 기반한 게시 정책에 적용되는 주제와 사용자의 목록을 생성합니다.policy_users테이블과 왼쪽 조인(left join)을 사용하여 사용자가 정책을 수락하지 않은 경우(pu.id IS NULL)를 찾습니다. 이 과정에서 폐기되지 않고, 만료되지 않으며, 현재 정책 버전과 일치하는 현재 유효한 정책 수락만 고려합니다.- 특정 사용자가 수락하지 않은 정책을 가진 주제를 나타내는 중복되지 않는
topic_id와user_id쌍을 선택합니다.
결과 예시
| topic | user |
|---|---|
| Policy Topic 1 | user_1 |
| Policy Topic 1 | user_2 |
| Policy Topic 2 | user_1 |
| … | … |