설명: 사용자가 자신의 첫 좋아요 배지를 취소해 달라고 요청했습니다. 사용자는 게시물을 좋아요 취소했지만, 배지가 계속 다시 부여되고 있었기 때문입니다. 배경은 지원 카테고리에서 이전 게시글에서 확인할 수 있습니다.
재현 단계:
- 새 사용자 생성
- 게시물에 좋아요
- 첫 좋아요 배지 획득
- 게시물 좋아요 취소
- 관리자 계정으로 전환
- 좋아요를 누른 사용자의 관리자 패널로 이동
- 배지 편집 옵션 방문
- 첫 좋아요 배지에서 “취소” 클릭
- 잠시 대기 (이 특정 배지에 대한 백필 작업이 언제 실행되는지 정확히 모르지만, 하루 정도면 충분할 것입니다. Sidekiq에서 배지 관련 작업을 모두 트리거하여 속도를 높이는 것도 시도해 볼 수 있습니다.)
- 해당 배지가 싫어한(좋아요 취소한) 동일한 게시물에 대해, 좋아요를 누른 날짜와 동일한 날짜로 사용자에게 자동으로 다시 부여됨
이 문제는 배지 부여를 위한 SQL 쿼리의 이 라인으로 좁혀졌습니다. 좋아요 취소 후에도 post_actions 테이블의 좋아요 액션 행은 여전히 존재하지만, deleted_at 컬럼에 날짜 값이 설정되어 있으며, 쿼리는 이를 고려하지 않기 때문입니다. 이 문제의 수정 방법은 서브쿼리의 WHERE 절을 다음과 같이 변경하는 것일 것이라고 생각합니다:
WHERE post_action_type_id = 2 AND
pa.deleted_at IS NULL AND
(:backfill OR pa.post_id IN (:post_ids) )
하지만 저는 개발 환경을 설정하지 않았고, 이 수정 사항을 직접 테스트할 시간이 많이 없습니다.
우선순위/중요도: 저는 이미 관련 post_actions 행을 삭제하여 이 문제를 스스로 해결했습니다. 그리고 이전에 이런 요청을 받은 적이 없습니다. 아마도 이는 매우 높은 우선순위는 아닐 것입니다?