Non assegnare badge agli utenti che non esistono?

Guardando una delle nostre pagine dei badge vedo

il che mi ha incuriosito: cosa è successo a tutti quegli avatar?

A quanto pare, questi utenti non esistono.

Forse non dovremmo assegnare badge a utenti che non esistono più? O forse dovremmo impedire che vengano visualizzati? In ogni caso, stanno sostituendo gli avatar degli utenti reali - quelli che ci importano!

10 Mi Piace

Hmmm… c’è qualcosa che non va qui, perché:

Il grant sta già facendo il join con l’utente, quindi deve estrarre l’ID utente da qualche parte.

Mi chiedo se il modo in cui è definito lo scope significhi che dependent: :destroy non funzioni correttamente.

In ogni caso, possiamo aggiungere una pulizia settimanale.

1 Mi Piace

Considerando quando sono stati assegnati questi badge (al momento della scrittura erano i più recenti), sospetto che vengano assegnati quando l’account utente non esiste, piuttosto che quando l’account esiste e poi non viene eliminato alla cancellazione dell’account.

Dovrò verificare.

2 Mi Piace

È strano perché le righe contengono gli ID utente; se l’utente viene eliminato, non c’è modo di recuperare questi ID.

3 Mi Piace

Penso che gli ID utente risiedano nella tabella incoming_links. Quei record non vengono distrutti in modo dipendente, e la query del badge di condivisione protegge solo contro il fatto che user_id sia null nella tabella incoming_links:

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

Anche il badge Primo Condivisione dovrebbe avere un bug simile:

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

3 Mi Piace

Ho creato una pull request che unisce quelle query sui badge alla tabella degli utenti – la mia prima pull request, quindi spero di aver fatto tutto correttamente!

3 Mi Piace