Modèle XP et gamification
Objectif du modèle
Encourager l’activité utile : complétion de profil, publications, participation locale et engagement, sans transformer DMV en réseau social généraliste.
Responsabilités
- Suivre les points ou niveaux liés à des actions produit.
- Récompenser des comportements utiles.
- Éviter les abus et manipulations.
- Alimenter éventuellement badges, progression ou visibilité non intrusive.
Relations principales
- Un utilisateur peut accumuler de l’XP.
- Un acteur peut avoir une progression de complétion ou qualité.
- Des actions comme publication, profil complet ou participation peuvent déclencher des événements.
Cycle de vie
- Action éligible.
- Validation backend.
- Attribution de points ou progression.
- Agrégation éventuelle.
- Correction ou retrait en cas d’abus.
Permissions/RBAC liées
- L’attribution doit être calculée côté Laravel.
- Les admins peuvent corriger les abus.
- Les frontends ne doivent pas déclarer seuls une récompense acquise.
Contraintes métier
- Gamification sobre et utile.
- Pas de mécanique addictive.
- Pas de classement social agressif.
- Valoriser la qualité plutôt que le volume brut.
Données sensibles éventuelles
- Historique d’activité utilisateur.
- Scores ou progression.
- Signaux anti-abus.
Cache/offline éventuel
- Scores affichables en cache.
- Attribution réelle revalidée côté backend.
Stratégie d’indexation
- Index par utilisateur/acteur, type d’événement, date.
- Agrégats possibles pour performance.
Partitionnement si concerné
Possible à long terme pour journal d’événements XP volumineux ; agrégats séparés à envisager.
État actuel — V1 implémentée
| Niveau | Description |
|---|---|
| Implémenté | Journal acteur_xp_events opérationnel. |
| Implémenté | ActorXpService avec whitelist, barème, déduplication. |
| Implémenté | Déclencheurs automatiques sur description et publications. |
| Cible future | Badges, niveaux, tableaux de progression, affichage frontend. |
Tables effectives
acteur_xp_events
| Colonne | Type | Description |
|---|---|---|
id | uuid | PK |
acteur_id | uuid | FK acteurs |
event_type | varchar | Type d’événement (whitelist) |
points | int | Points attribués (fixés côté serveur) |
meta | jsonb | Métadonnées libres optionnelles |
created_at | timestamp | Date d’attribution |
Barème V1
| Événement | Points | Déclenchement unique |
|---|---|---|
onboarding_completed | 50 | oui |
assistant_onboarding_used | 30 | oui |
profile_description_added | 20 | oui |
first_publication_created | 30 | oui |
publication_created | 10 | non |
Règles anti-abus V1
- Whitelist PHP exhaustive : tout événement non listé est refusé sans erreur.
- Déduplication sur les événements
unique: un deuxième insert est ignoré. - Points fixés côté
ActorXpServiceuniquement — non envoyables par le client. - Route throttlée à 10 requêtes/minute.
- Policy
ActeurPolicy::addXprequiert d’être propriétaire ou admin.
Points restants à définir
- Badges et niveaux associés aux totaux XP.
- Affichage frontend (jauge, historique).
- Correction ou retrait par admin (actuellement non exposé).