Après avoir mis à jour notre instance Discourse, nous semblons avoir des montants incorrects pour les solutions lorsqu’on regarde les résumés de profil. Exemple :
Correct (depuis la fenêtre contextuelle du profil) :
J’ai déjà remarqué quelques changements récemment, y compris un bug majeur :
Les montants corrects sont évidemment toujours disponibles, il s’est donc probablement passé quelque chose lors de la migration des données vers les nouvelles tables ?
Il y a des divergences dans le décompte des solutions dans Discourse, car nous incluions des sujets et des publications qui ont déjà été supprimés.
Avant la migration, nous indiquions :
John a 27 solutions car les gens ont marqué son message comme solution 27 fois.
Ceci est stocké dans la table UserActions.
Après la migration, nous comptons maintenant :
John a 20 solutions car il y a 20 sujets dont ses messages sont des solutions.
Ceci est stocké dans la table SolvedTopics et a un lien direct vers un sujet existant et non supprimé.
Il y a une subtile différence ici - dans le premier scénario, il n’y avait aucune validation pour vérifier si le message solution ou son sujet existait toujours.
Je vais vérifier avec notre équipe quel est le meilleur nombre à afficher. Personnellement, je suis enclin à compter les solutions pour les sujets qui existent toujours.
Je suis tout à fait certain que ce ne peut pas être le problème — car cela ne causerait que moins de chiffres plutôt que plus dans certains cas, n’est-ce pas ? J’ai un autre exemple pour vous :
→ Incorrect : Profile - SGS - Garuda Linux Forum
→ Correct :
Il me semble impossible que ce mécanisme de comptage puisse plus que doubler le nombre de messages résolus. De plus (bien que non confirmé, bien sûr), je doute fort que le nombre de messages supprimés ait été aussi élevé dans mon exemple précédent.
Je crois avoir trouvé le bug (bien que la déclaration concernant la divergence que j’ai mentionnée ci-dessus soit toujours vraie) –
Dans l’implémentation précédente, le nombre de solutions dans le résumé de John est compté par le nombre de fois où quelqu’un a marqué le message de John comme solution
def solved_count
UserAction.where(user: @user).where(action_type: UserAction::SOLVED).count
end
Dans la nouvelle implémentation, le nombre de solutions dans le résumé d’utilisateur de John est le nombre de fois où John a marqué un message comme solution
def solved_count
DiscourseSolved::SolvedTopic.where(accepter: @user).count
end
Cela explique la grande différence. Le “nombre de solutions” a changé de définition, passant de “combien de fois vous avez répondu” à “combien de fois vous avez accepté”.
Je vais corriger le bug, merci encore pour le signalement !
Je mettrai également à jour les différentes méthodes de comptage utilisées dans la fenêtre contextuelle du profil et le résumé de l’utilisateur.
Félicitations à @ondrej pour m’avoir également mentionné Solution badge not working?. Il semble que des divergences se produisaient déjà avant cette migration. L’avantage est que nous allons migrer vers un nombre plus cohérent sur Discourse et nos plugins.