Blog
Architecture
18 décembre 20258 min

Designer un système de gamification en PostgreSQL

La gamification semble simple en surface et explose en complexité dès qu'on modélise. Pour TAMSIV, je voulais un système complet.

Un schema dédié

Le schema gamification est séparé de privat et collaborative. Isolation des responsabilités : ses propres RLS policies, ses propres RPC functions.

Les 5 tables

  • user_stats : points totaux, niveau, streak courant/max, dernière activité
  • user_badges : relation many-to-many utilisateurs/badges, date d'obtention
  • points_history : chaque gain de points loggué pour analytics
  • daily_challenges : un challenge par jour par utilisateur
  • feed_activity : flux d'activité pour le feed social

12 niveaux progressifs

Seuils : [0, 100, 250, 500, 1000, 2000, 3500, 5500, 8000, 12000, 17500, 25000]. Les niveaux 1-3 atteignables en quelques jours. Le niveau 12 demande des mois. Au-delà, une formule mathématique prend le relais.

Les RPC atomiques

Quand un utilisateur complète une tâche : ajouter des points, vérifier le niveau, mettre à jour le streak, vérifier les badges, mettre à jour le challenge, logger l'historique. Tout atomique via des fonctions PostgreSQL transactionnelles.

Les streaks

Gestion des fuseaux horaires, streak freezes, détection de rupture. Le streak max est plafonné à 365 jours — au-delà, c'est de l'addiction, pas de la gamification.