Esta consulta retorna todos os usuários (incluindo seus e-mails) que enviam e-mail para uma caixa de entrada de grupo, excluindo os membros do grupo.
O caso de uso é uma maneira de baixo atrito para permitir que as pessoas em um evento físico criem um usuário de estágio para o meu site.
Descobri que em um evento presencial, muitos usuários potenciais lutam para completar o processo de inscrição (que inclui digitar seu endereço de e-mail (corretamente), escolher um nome de usuário e gerar uma senha, no mínimo. Também requer validação de e-mail e login subsequente. Isso é muito pedir quando se está conversando com as pessoas / ouvindo um palestrante / comendo / etc!
Isso pode ser minimizado um pouco com OAuth2, mas ainda há algumas coisas a fazer e os menos experientes tecnicamente parecem ter dificuldades com isso também.
Minha Solução
-
Crie um grupo semi-privado com um endereço de e-mail cativante (ou seja, join@mycommunity.url)
-
Apresente um código QR que codifica um link mailto: para esse endereço
-
Coloque as boas pessoas que gerenciarão a entrada subsequente dessas pessoas no grupo
-
Adicione a seguinte consulta ao Data Explorer e conceda acesso ao grupo:
-- [params]
-- string :group_name
WITH group_members AS (
SELECT gu.user_id
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
WHERE g.name = :group_name
),
non_group_users AS (
SELECT u.id, u.username, ue.email, u.created_at
FROM users u
JOIN user_emails ue ON ue.user_id = u.id
WHERE NOT EXISTS (
SELECT 1
FROM group_members gm
WHERE u.id = gm.user_id
) AND ue.primary = TRUE
),
group_messages AS (
SELECT tg.topic_id
FROM topic_allowed_groups tg
JOIN groups g ON g.id = tg.group_id
WHERE g.name = :group_name
),
group_message_participants AS (
SELECT gm.topic_id, tau.user_id AS tau_user_id FROM group_messages gm
JOIN topic_allowed_users tau ON tau.topic_id = gm.topic_id
JOIN non_group_users ngu ON ngu.id = tau.user_id
)
SELECT ngu.username, ngu.email, ngu.created_at FROM group_message_participants gmp
JOIN non_group_users ngu ON ngu.id = gmp.tau_user_id
GROUP BY ngu.username, ngu.email, ngu.created_at
ORDER BY ngu.username
Há um pouco de acompanhamento a ser feito depois, mas pelo menos você captura seus endereços de e-mail de forma confiável de uma maneira que requer apenas dois ou três cliques / toques do usuário!