Não conceder emblemas a usuários que não existem?

Ao observar uma de nossas páginas de distintivos, vejo

o que me deixou curioso — o que aconteceu com todos esses avatares?

Acontece que esses usuários não existem.

Provavelmente não deveríamos conceder distintivos a usuários que não existem mais? Ou talvez impedir que sejam exibidos? De qualquer forma, eles estão substituindo os avatares dos usuários reais — aqueles que nos importam!

10 curtidas

Hmmm… algo não está certo aqui, porque:

O grant já está fazendo join na tabela de usuários, então ele precisa obter o ID do usuário de algum lugar.

Fico me perguntando se a forma como isso está escopado significa que o dependent_destroy não está funcionando corretamente.

De qualquer forma, podemos adicionar uma limpeza semanal.

1 curtida

Considerando quando essas insígnias foram concedidas (no momento da escrita, eram as mais recentes), suspeito que elas são concedidas quando a conta do usuário não existe, em vez de serem concedidas quando a conta existe e, em seguida, não serem excluídas na exclusão da conta.

Terei que verificar.

2 curtidas

É estranho, pois as linhas possuem IDs de usuário; se o usuário for excluído, não há de onde obter esses IDs.

3 curtidas

Acho que os IDs de usuário estão na tabela incoming_links. Esses registros não são destruídos de forma dependente, e a consulta do emblema de compartilhamento apenas protege contra o user_id ser nulo na tabela incoming_links:

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

O emblema First Share deve ter um bug semelhante:

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

3 curtidas

Criei um pull request que une essas consultas de emblemas à tabela de usuários—meu primeiro pull request, então espero que tenha feito tudo certo!

3 curtidas