Ehi ragazzi!
Sto provando alcune query per i badge
Alcune funzionano bene, mentre altre le sto ancora sperimentando.
Qualcuno sa come creare una query che assegni un badge a un utente che ha ottenuto X visualizzazioni nei topic creati in una categoria specifica? Sono riuscito a costruire questa query, ma funziona solo per un singolo topic (l’utente ha ottenuto almeno X visualizzazioni in un topic di una categoria specifica). Il codice è:
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
Ma invece di considerare un solo topic, vorrei assegnare il badge a coloro che raggiungono, ad esempio, 500 visualizzazioni nella somma delle visualizzazioni di tutti i topic creati da quella persona nella categoria Y. Qualcuno sa come posso ottenere questo risultato? 
Forse questa è una soluzione (ulteriori test in arrivo :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
Ciao a tutti, sono riuscito a testare la query qui sopra e ha funzionato! Ora mi chiedevo se qualcuno potesse aiutarmi con un’altra sfida. Ecco la query:
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
In questo esempio: l’utente che crea storie nella categoria Arts e le cui storie raggiungono 100 visualizzazioni riceverà il badge. Il problema è che:
dovrò modificare questa logica nel tempo, perché il numero di visualizzazioni aumenterà .
Questo badge richiede oggi 100 visualizzazioni, ma potrebbe richiederne 1000 tra sei mesi.
Il problema è che quando modifico la query, questa viene rieseguita ogni giorno e gli utenti che l’hanno già ricevuto la perderebbero.
E questo sarebbe un disastro: immagina di aver raggiunto (ora, all’inizio della piattaforma) 10 visualizzazioni e di aver vinto un Badge di Livello 2 in Tecnologia. Ma qualche mese dopo la piattaforma cresce e ora il Livello 2 non richiede più 10 visualizzazioni, bensì 100. Perderesti il badge.
Esiste un modo per evitare che ciò accada?