one our badge pages 페이지를 살펴보니
이런 모습이 보여서 궁금해졌습니다. 모든 아바타는 어디로 사라진 걸까요?
알고 보니 해당 사용자들은 존재하지 않는 사용자들이었습니다.
아마 더 이상 존재하지 않는 사용자에게 배지를 부여하는 것을 피해야 하지 않을까요? 아니면 표시되는 것을 막아야 할까요? 어쨌든, 이들은 실제 사용자—우리가 신경 써야 할 사용자들—의 아바타를 밀어내고 있습니다!
one our badge pages 페이지를 살펴보니
이런 모습이 보여서 궁금해졌습니다. 모든 아바타는 어디로 사라진 걸까요?
알고 보니 해당 사용자들은 존재하지 않는 사용자들이었습니다.
아마 더 이상 존재하지 않는 사용자에게 배지를 부여하는 것을 피해야 하지 않을까요? 아니면 표시되는 것을 막아야 할까요? 어쨌든, 이들은 실제 사용자—우리가 신경 써야 할 사용자들—의 아바타를 밀어내고 있습니다!
음… 여기 뭔가 이상한데, 그 이유는:
grant는 이미 user에 조인되어 있으므로, user id를 어딘가에서 가져와야 합니다.
이렇게 스코프가 설정되어 있으면 dependent destroy가 제대로 작동하지 않는 것 같기도 합니다.
어쨌든 주간 정리 작업을 추가할 수는 있습니다.
이 배지들이 언제 부여되었는지를 고려해 보면(작성 시점 기준으로 가장 최근이었던 것들), 계정 삭제 시 삭제되지 않는 것이 아니라, 사용자 계정이 존재하지 않을 때 부여되는 것으로 추정됩니다.
확인해 봐야겠습니다.
행에는 사용자 ID가 포함되어 있는데, 사용자가 삭제되면 이 ID를 가져올 곳이 없기 때문에 이상합니다.
사용자 ID가 incoming_links 테이블에 저장되어 있다고 생각합니다. 해당 레코드는 종속적으로 삭제되지 않으며, 공유 배지 쿼리는 incoming_links 테이블에서 user_id가 null인 경우만 방지합니다:
https://github.com/discourse/discourse/blob/main/lib/badge_queries.rb#L199
First Share 배지도 유사한 버그가 있을 수 있습니다:
https://github.com/discourse/discourse/blob/main/lib/badge_queries.rb#L64
사용자 테이블에 해당 배지 쿼리를 조인하는 pull request를 만들었습니다. 제 첫 pull request이니, 모든 것을 올바르게 했기를 바랍니다!