Tenho analisado as consultas de emblemas existentes para ter uma ideia de quais consultas visam postagens na tabela badge_posts ou utilizam algum outro método para excluir postagens de categorias protegidas de serem utilizadas.
As seguintes consultas de emblemas visam postagens específicas e não serão concedidas por atividades em categorias privadas:
- Editor
- Primeira Bandeira
- Primeiro Curtir
- Primeiro Link
- Primeira Citação
- Primeiro Compartilhamento
- Primeiro Emoji
- Primeira Menção
- Primeira Onebox
- Primeira Resposta por E-mail
- Leitor
- Editor de Wiki
- Ótimo Compartilhamento
- Bom Compartilhamento
- Helpdesk
- Bom Compartilhamento
- Bem-vindo
- Link Famoso
- Ótima Resposta
- Ótimo Tópico
- Boa Resposta
- Bom Tópico
- Link Quente
- Boa Resposta
- Bom Tópico
- Link Popular
As seguintes emblemas não consultam postagens específicas e serão concedidas por atividades em categorias privadas:
- Licenciado
- Autobiógrafo
- Certificado
- Novo Usuário do Mês
- Leia as Diretrizes
- Admirado
- Campeão
- Loucamente Apaixonado
- Devoto
- Empático
- Aficionado
- Aniversário
- Campanhista
- Dá de Volta
- Amor Superior
- Respeitado
- Apreciado
- Entusiasta
- Fora de Amor
- Promotor
- Obrigado
- Líder
- Regular
- Básico
- Membro
- Equipe
- Foto de Perfil
Algo semelhante a isso já é coberto pelos emblemas Apreciado (1 curtida em 20 postagens) e Respeitado (2 curtidas em 100 postagens). Algumas variações dessas consultas poderiam ser adicionadas. Por exemplo, 10 curtidas em 20 postagens. Um emblema concedido por tópicos super curtidos também seria uma boa ideia — funcionaria como o equivalente ao emblema Ótimos Tópicos. Por exemplo, poderia ser concedido quando um usuário criar 10 tópicos que receberam 10 curtidas.
Não tenho certeza se faria sentido adicionar um emblema concedido por atividade em uma única postagem ou tópico que não contenha um link para a postagem. Por exemplo, um emblema alternativo de Primeira Curtida poderia ser criado com o seguinte SQL:
SELECT pa1.user_id, pa1.created_at granted_at
FROM (
SELECT pa.user_id, min(pa.id) id
FROM post_actions pa
JOIN posts p on p.id = pa.post_id
WHERE post_action_type_id = 2
GROUP BY pa.user_id
) x
JOIN post_actions pa1 on pa1.id = x.id
Para que a consulta funcione, é necessário usar o gatilho “Atualizar diariamente” em vez da consulta “Quando um usuário age em uma postagem”. Na página de Emblemas, os usuários que receberam o emblema serão exibidos juntamente com o momento em que o emblema foi concedido. Não haverá um link para a postagem pela qual o emblema foi concedido:
Esse tipo de abordagem faz sentido para sites que possuem principalmente categorias protegidas? Se fizer, poderia ser usado para duplicar algumas das consultas que atualmente visam a tabela badge_posts.
