He estado revisando las consultas de insignias existentes para tener una idea de qué consultas apuntan a publicaciones en la tabla badge_posts, o utilizan algún otro método para excluir publicaciones de categorías protegidas de ser utilizadas.
Las siguientes consultas de insignias especifican publicaciones y no se otorgarán por actividad en categorías privadas:
- Editor
- Primera bandera
- Primer like
- Primer enlace
- Primera cita
- Primer compartir
- Primer emoji
- Primera mención
- Primera onebox
- Primera respuesta por correo electrónico
- Lector
- Editor de wiki
- Gran compartir
- Buen compartir
- Mesa de ayuda
- Buen compartir
- Bienvenido
- Enlace famoso
- Gran respuesta
- Gran tema
- Buena respuesta
- Buen tema
- Enlace caliente
- Buena respuesta
- Buen tema
- Enlace popular
Las siguientes insignias no consultan publicaciones específicas y sí se otorgarán por actividad en categorías privadas:
- Licenciado
- Autobiógrafo
- Certificado
- Nuevo usuario del mes
- Leer las directrices
- Admirado
- Campeón
- Loco de amor
- Devoto
- Empático
- Aficionado
- Aniversario
- Campañero
- Da de vuelta
- Amor superior
- Respetado
- Apreciado
- Entusiasta
- Fuera de amor
- Promotor
- Gracias
- Líder
- Regular
- Básico
- Miembro
- Personal
- Foto de perfil
Algo similar a esto ya está cubierto por las insignias Apreciado (1 like en 20 publicaciones) y Respetado (2 likes en 100 publicaciones). Se podrían agregar algunas variaciones de estas consultas. Por ejemplo, 10 likes en 20 publicaciones. También sería una buena idea una insignia que se otorgara por temas súper liked; funcionaría como el equivalente a la insignia Grandes temas. Por ejemplo, podría otorgarse cuando un usuario ha creado 10 temas que han recibido 10 likes.
No estoy seguro si tendría sentido agregar una insignia que se otorgue por actividad en una sola publicación o tema que no tenga un enlace a la publicación. Por ejemplo, se podría crear una insignia alternativa de Primer like con el siguiente 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 la consulta funcione, debe usar el disparador “Actualizar diariamente” en lugar de la consulta “Cuando un usuario actúa sobre una publicación”. En la página de Insignias, se mostrarán los usuarios que han recibido la insignia junto con la hora en que se otorgó. No habrá un enlace a la publicación por la que se otorgó la insignia:
¿Tiene sentido este tipo de enfoque para sitios que tienen principalmente categorías protegidas? Si es así, podría usarse para duplicar algunas de las consultas que actualmente apuntan a la tabla badge_posts.
