¡Hola a todos!
Estoy probando algunas consultas de insignias aquí
Algunas funcionan bien y otras aún las estoy probando.
¿Alguien sabe cómo crear una consulta que otorgue una insignia a un usuario que tenga X vistas en temas creados en una categoría específica? Logré construir esta consulta, pero para un tema (un usuario obtuvo al menos X vistas en un tema en una categoría específica). El código es:
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
Pero en lugar de solo un tema, me gustaría otorgar la insignia a aquellos que obtengan, por ejemplo, 500 vistas en la suma de vistas de todos los temas que esa persona creó en la categoría Y. ¿Alguien sabe cómo lograr esto? 
Quizás esta sea una solución (pruebas adicionales en camino :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
Hola chicos, logré probar esta consulta arriba y funcionó. Ahora, me pregunto si alguien puede ayudarme con otro desafío. Esta es la 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
En este ejemplo: El usuario que crea historias en la categoría de Artes y esas historias alcanzan 100 vistas, recibirá la insignia. El problema es que:
Necesitaré cambiar esta lógica con el tiempo, porque el número de vistas aumentará.
Esta insignia requiere 100 vistas hoy, pero podría requerir 1000 vistas dentro de 6 meses.
El problema es que cuando cambio la consulta, se ejecuta nuevamente todos los días y los usuarios que ya la recibieron la perderían.
Y esto sería un desastre; imagina que alcanzaste (ahora, al principio de la plataforma) 10 vistas y ganaste una Insignia de Nivel 2 en Tecnología. Pero algunos meses después, la plataforma crece y ahora el Nivel 2 ya no requiere 10 vistas, sino 100. Perderías la insignia.
¿Hay alguna manera de evitar que esto suceda?