Total de vistas entre múltiples temas

¡Hola a todos!

Estoy probando algunas consultas de insignias aquí :slight_smile: 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? :smiley:

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?