#19 RFC: Catégories de trophées pour gérer les supressions de contenus

Closed
opened 3 months ago by Lephenixnoir · 4 comments

Cas typique d’un utilisateur qui gagne un trophée en postant du spam, et ensuite on supprime le spam. On veut probablement que le trophée disparaisse aussi.

L’API qu’on a pour l’instant est pas vraiment appropriée. Je propose d’ajouter dans le code les catégories dont on a discuté, par exemple :

Catégorie post_count

  1. Rien
  2. Premiers mots (20 posts)
  3. Beau parleur (250 posts)
  4. Plume infaillible (1500 posts)
  5. Romancier émérite (5000 posts)

Chaque utilisateur aurait exactement un trophée dans toute la catégorie, qui serait le plus haut trophée débloqué. (On peut aussi dire que tous les trophées inférieurs sont débloqués aussi. Ça ne change rien à la suite.)

De cette façon, User.update_trophies() peut se contenter de mettre à jour quel trophée l’utilisateur a dans chaque catégorie pour qu’une suppression de spam le fasse automatiquement redescendre. On notifie uniquement quand le niveau du trophée monte.

Pour les trophées attribués manuellement ou n’étant pas dans des catégories, il suffit de ne pas mettre de code dans User.update_trophies() et il ne se passera rien.

Avantages :

  • Pas besoin de dupliquer ou complexifier outre mesure le code de gestion de trophées.
  • Pas besoin de retirer puis redonner des trophées, ce qui mettrait des notifications partout.

Comme c’est un changement de sémantique quelque part, je voudrais avoir votre avis. Mais ça change quasiment rien d’un point de vue extérieur. ^^

Cas typique d'un utilisateur qui gagne un trophée en postant du spam, et ensuite on supprime le spam. On veut probablement que le trophée disparaisse aussi. L'API qu'on a pour l'instant est pas vraiment appropriée. Je propose d'ajouter dans le code les catégories dont on a discuté, par exemple : **Catégorie `post_count`** 1. Rien 2. Premiers mots (20 posts) 3. Beau parleur (250 posts) 4. Plume infaillible (1500 posts) 5. Romancier émérite (5000 posts) Chaque utilisateur aurait exactement un trophée dans toute la catégorie, qui serait **le plus haut trophée débloqué**. (On peut aussi dire que tous les trophées inférieurs sont débloqués aussi. Ça ne change rien à la suite.) De cette façon, `User.update_trophies()` peut se contenter de mettre à jour quel trophée l'utilisateur a dans chaque catégorie pour qu'une suppression de spam le fasse automatiquement redescendre. On notifie uniquement quand le niveau du trophée monte. Pour les trophées attribués manuellement ou n'étant pas dans des catégories, il suffit de ne pas mettre de code dans `User.update_trophies()` et il ne se passera rien. **Avantages :** * Pas besoin de dupliquer ou complexifier outre mesure le code de gestion de trophées. * Pas besoin de retirer puis redonner des trophées, ce qui mettrait des notifications partout. Comme c'est un changement de sémantique quelque part, je voudrais avoir votre avis. Mais ça change quasiment rien d'un point de vue extérieur. ^^
Lephenixnoir self-assigned this 3 months ago
Lephenixnoir added the
enhancement
label 3 months ago
Lephenixnoir commented 3 months ago
Owner

Fait à partir du commit ef36f6e sur la branche trophies.

Le code est pas hyper hyper clean, mais ça marche de façon propre. Le système supporte désormais la régression pourvu qu’on fasse un update_trophies() avec le contexte approprié (le même que si on postait le contenu qu’on a en fait supprimé).

Par exemple, si je mets à jour mon profil, cela déclenche un update_trophies() (j’ai enlevé le contexte pour tester) et ça me retire tout trophée que je m’étais accordé en termes de nombres de postes, de tutoriels, etc. puisque je n’en ai pas.

Notez que je n’ai pas mis de catégorie pour les trophées “divers” accordés de façon automatique ; ça implique qu’ils ne seront pas retirés de façon automatique. Je suppose que c’est un bug qu’il faudra penser à résoudre.

Je laisse ouvert pour vos commentaires, mais je considère ça comme fait et mergeable sur la branche master.

Fait à partir du commit `ef36f6e` sur la branche `trophies`. Le code est pas hyper hyper clean, mais ça marche de façon propre. Le système supporte désormais la régression pourvu qu'on fasse un `update_trophies()` avec le contexte approprié (le même que si on postait le contenu qu'on a en fait supprimé). Par exemple, si je mets à jour mon profil, cela déclenche un `update_trophies()` (j'ai enlevé le contexte pour tester) et ça me retire tout trophée que je m'étais accordé en termes de nombres de postes, de tutoriels, etc. puisque je n'en ai pas. Notez que je n'ai pas mis de catégorie pour les trophées "divers" accordés de façon automatique ; ça implique qu'ils ne seront pas retirés de façon automatique. Je suppose que c'est un bug qu'il faudra penser à résoudre. Je laisse ouvert pour vos commentaires, mais je considère ça comme fait et mergeable sur la branche master.
Darks commented 3 months ago
Owner

Cf le fil suivant

En l’occurence je suis pas fan de ce système pour deux raisons : add_trophy est une primitive qui selon moi doit rester basique. On s’en fout de savoir si y’a des trophées ou non, si je l’appelle je m’attends à ce que le trophée x, y ou z (j’ai fait du duck programming) soit ajouté. Idem pour del_trophy. La seconde, c’est que pour moi les trophées se cumulent. C’est d’ailleurs ce qui est fait dans l’intégralité des sites/jeux que je connais qui ont un système de trophées.

Cf le [fil suivant](https://www.planet-casio.com/Fr/forums/topic15259-4--v5--%C3%89criture-des-specifications.html#168176) > En l'occurence je suis pas fan de ce système pour deux raisons : add_trophy est une primitive qui selon moi doit rester basique. On s'en fout de savoir si y'a des trophées ou non, si je l'appelle je m'attends à ce que le trophée x, y ou z (j'ai fait du duck programming) soit ajouté. Idem pour del_trophy. La seconde, c'est que pour moi les trophées se cumulent. C'est d'ailleurs ce qui est fait dans l'intégralité des sites/jeux que je connais qui ont un système de trophées.
Lephenixnoir commented 3 months ago
Owner

J’ai corrigé ça sur master. Tout est bon sauf l’affichage des trophées (un trophée par ligne) mais c’est parce que je vais modifier ça avec les icônes ensuite (je veux aussi aligner les colonnes).

Si tu as un moment pour tester, je suis preneur. Comme ça je peux fermer cette issue et supprimer la branche trophies.

J'ai corrigé ça sur master. Tout est bon sauf l'affichage des trophées (un trophée par ligne) mais c'est parce que je vais modifier ça avec les icônes ensuite (je veux aussi aligner les colonnes). Si tu as un moment pour tester, je suis preneur. Comme ça je peux fermer cette issue et supprimer la branche `trophies`.
Darks commented 3 months ago
Owner

À première vue, le code release dans le commit ba54869c33 me convient, je testerai dès que possible.

Je pense qu’on peut clore l’issue, quitte à la réouvrir si un bug dérangeant se déclare.

À première vue, le code release dans le commit ba54869c33 me convient, je testerai dès que possible. Je pense qu'on peut clore l'issue, quitte à la réouvrir si un bug dérangeant se déclare.
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
Cancel
Save
There is no content yet.