Ne pas accorder de badges aux utilisateurs qui n'existent pas ?

En regardant une de nos pages de badges, je vois

ce qui m’a intrigué : qu’est-il arrivé à tous ces avatars ?

Il s’avère que ces utilisateurs n’existent pas.

Nous ne devrions probablement pas attribuer de badges à des utilisateurs qui n’existent plus ? Ou peut-être empêcher leur affichage ? Quoi qu’il en soit, ils évincent les avatars des vrais utilisateurs – ceux qui nous importent !

10 « J'aime »

Hmmm… quelque chose ne va pas ici, car :

La grant joint déjà l’utilisateur, elle doit donc récupérer l’ID utilisateur depuis un endroit quelconque.

Je me demande si la manière dont cela est délimité signifie que la destruction dépendante ne fonctionne pas correctement.

Quoi qu’il en soit, nous pouvons ajouter un nettoyage hebdomadaire.

1 « J'aime »

Compte tenu du moment où ces badges ont été accordés (au moment de la rédaction, ils étaient les plus récents), je soupçonne qu’ils sont attribués lorsque le compte utilisateur n’existe pas, plutôt que d’être accordés lorsque le compte existe puis non supprimés lors de la suppression du compte.

Je devrai vérifier.

2 « J'aime »

C’est étrange, car les lignes contiennent des identifiants d’utilisateur. Si l’utilisateur est supprimé, il n’y a nulle part où récupérer ces identifiants.

3 « J'aime »

Je pense que les identifiants d’utilisateur résident dans la table des liens entrants. Ces enregistrements ne sont pas détruits de manière dépendante, et la requête du badge de partage ne protège que contre la valeur null de user_id dans la table incoming_links :

https://github.com/discourse/discourse/blob/main/lib/badge_queries.rb#L199

Le badge « First Share » devrait présenter un bug similaire :

https://github.com/discourse/discourse/blob/main/lib/badge_queries.rb#L64

3 « J'aime »

J’ai créé une demande de fusion qui joint ces requêtes de badges à la table des utilisateurs — ma première demande de fusion, alors j’espère avoir tout fait correctement !

https://github.com/discourse/discourse/pull/13851

3 « J'aime »