Blog
Architecture
18 dicembre 20258 min

Progettare un sistema di gamification in PostgreSQL

La gamification sembra semplice in superficie ed esplode in complessità non appena la si modella. Per TAMSIV, volevo un sistema completo.

Uno schema dedicato

Lo schema gamification è separato da privat e collaborative. Isolamento delle responsabilità: le proprie policy RLS, le proprie funzioni RPC.

Le 5 tabelle

  • user_stats: punti totali, livello, streak corrente/max, ultima attività
  • user_badges: relazione many-to-many utenti/badge, data di ottenimento
  • points_history: ogni guadagno di punti loggato per analytics
  • daily_challenges: una sfida al giorno per utente
  • feed_activity: flusso di attività per il feed sociale

12 livelli progressivi

Soglie: [0, 100, 250, 500, 1000, 2000, 3500, 5500, 8000, 12000, 17500, 25000]. I livelli 1-3 raggiungibili in pochi giorni. Il livello 12 richiede mesi. Oltre, subentra una formula matematica.

Le RPC atomiche

Quando un utente completa un'attività: aggiungere punti, verificare il livello, aggiornare lo streak, verificare i badge, aggiornare la sfida, loggare la cronologia. Tutto atomico tramite funzioni transazionali PostgreSQL.

Gli streak

Gestione dei fusi orari, streak freezes, rilevamento di interruzioni. Lo streak massimo è limitato a 365 giorni — oltre, è dipendenza, non gamification.