Projetando um sistema de gamificação em PostgreSQL
A gamificação parece simples na superfície e explode em complexidade assim que é modelada. Para o TAMSIV, eu queria um sistema completo.
Um esquema dedicado
O esquema gamification é separado de privat e collaborative. Isolamento de responsabilidades: suas próprias políticas RLS, suas próprias funções RPC.
As 5 tabelas
- user_stats: pontos totais, nível, sequência atual/máxima, última atividade
- user_badges: relação muitos-para-muitos usuários/emblemas, data de obtenção
- points_history: cada ganho de pontos registrado para análise
- daily_challenges: um desafio por dia por usuário
- feed_activity: feed de atividades para o feed social
12 níveis progressivos
Limiares: [0, 100, 250, 500, 1000, 2000, 3500, 5500, 8000, 12000, 17500, 25000]. Os níveis 1-3 são alcançáveis em alguns dias. O nível 12 requer meses. Além disso, uma fórmula matemática assume o controle.
As RPCs atômicas
Quando um usuário completa uma tarefa: adicionar pontos, verificar o nível, atualizar a sequência, verificar os emblemas, atualizar o desafio, registrar o histórico. Tudo atômico via funções transacionais PostgreSQL.
As sequências
Gerenciamento de fusos horários, congelamento de sequências, detecção de quebra. A sequência máxima é limitada a 365 dias — além disso, é vício, não gamificação.