E aí, pessoal!
Estou testando algumas consultas de distintivos aqui
Algumas estão funcionando bem e outras ainda estou tentando.
Alguém sabe como criar uma consulta que conceda um distintivo a um usuário que tenha X visualizações em tópicos criados em uma categoria específica? Consegui montar essa consulta, mas apenas para um tópico (usuário teve pelo menos X visualizações em um tópico de uma categoria específica). O código é:
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'Technology'
) AND p.post_number = 1
AND views >= 10
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
Mas, em vez de considerar apenas um tópico, gostaria de conceder o distintivo para aqueles que alcançarem, por exemplo, 500 visualizações na soma das visualizações de todos os tópicos que essa pessoa criou na categoria Y. Alguém sabe como conseguir isso? 
Talvez esta seja uma solução (mais testes em breve :D)
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'Technology'
) AND p.post_number = 1
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
HAVING SUM (views) > XXXXXXXXXXX
Oi pessoal, consegui testar essa consulta lá em cima e funcionou! Agora, estou me perguntando se alguém pode me ajudar com outro desafio. Esta é a consulta:
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'Arts'
) AND p.post_number = 1
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
HAVING SUM (views) >= 100
Neste exemplo: o usuário que cria histórias na categoria Arts e essas histórias atingem 100 visualizações receberá a medalha. O problema é que:
Precisarei alterar essa lógica ao longo do tempo, porque o número de visualizações aumentará.
Essa medalha exige 100 visualizações hoje, mas pode exigir 1000 visualizações daqui a 6 meses.
O problema é que, quando altero a consulta, ela é executada novamente todos os dias e os usuários que já a receberam a perderiam.
E isso seria um desastre. Imaginem que vocês alcançaram (agora, no início da plataforma) 10 visualizações e ganharam uma Medalha de Nível 2 em Tecnologia. Mas alguns meses depois a plataforma cresce e agora o Nível 2 exige não mais 10 visualizações, mas 100. Vocês perderiam a medalha.
Existe alguma maneira de evitar que isso aconteça?