첫 번째 좋아요 배지를 제거할 수 없습니다

설명: 사용자가 자신의 첫 좋아요 배지를 취소해 달라고 요청했습니다. 사용자는 게시물을 좋아요 취소했지만, 배지가 계속 다시 부여되고 있었기 때문입니다. 배경은 지원 카테고리에서 이전 게시글에서 확인할 수 있습니다.

재현 단계:

  1. 새 사용자 생성
  2. 게시물에 좋아요
  3. 첫 좋아요 배지 획득
  4. 게시물 좋아요 취소
  5. 관리자 계정으로 전환
  6. 좋아요를 누른 사용자의 관리자 패널로 이동
  7. 배지 편집 옵션 방문
  8. 첫 좋아요 배지에서 “취소” 클릭
  9. 잠시 대기 (이 특정 배지에 대한 백필 작업이 언제 실행되는지 정확히 모르지만, 하루 정도면 충분할 것입니다. Sidekiq에서 배지 관련 작업을 모두 트리거하여 속도를 높이는 것도 시도해 볼 수 있습니다.)
  10. 해당 배지가 싫어한(좋아요 취소한) 동일한 게시물에 대해, 좋아요를 누른 날짜와 동일한 날짜로 사용자에게 자동으로 다시 부여됨

이 문제는 배지 부여를 위한 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 행을 삭제하여 이 문제를 스스로 해결했습니다. 그리고 이전에 이런 요청을 받은 적이 없습니다. 아마도 이는 매우 높은 우선순위는 아닐 것입니다?

2개의 좋아요

사용자는 게시글에 좋아요를 눌렀습니다. 좋아요를 취소했다고 해서, 사용자가 게시글에 좋아요를 누르는 법을 알고 있다는 사실이 바뀌지는 않죠. 어쩌면 ‘첫 좋아요 취소’ 배지를 받을 자격이 있을지도 모르지만, 일단 좋아요를 눌렀다면 그건 이미 좋아요를 누른 것이므로, 해당 배지를 받게 됩니다. 울린 종소리를 되돌릴 수는 없잖아요.

제 추측도 그렇습니다.

귀하의 해결책은 매우 기발했습니다. 그 사용자의 배지를 제거할 또 다른 방법은 사용자를 삭제하는 것입니다. :rofl:

2개의 좋아요

그렇긴 하지만, 좋아요를 취소한 후에도 관리자로서 해당 배지를 사용자로부터 취소할 수 없다는 점은 여전히 직관적이지 않다고 생각합니다. 적어도 배지 편집 보기의 “취소” 버튼에 배지를 취소할 수 없다는 안내 문구가 있어야 하지 않을까요? 현재처럼 백필링 작업 중에 배지가 조용히 다시 부여되어, 관리자가 정말로 그 버튼을 클릭했는지 의심하게 만드는 방식보다는요.

2개의 좋아요

동의합니다.

제 반응은 다음과 같은 내용이었을 것입니다:

죄송합니다, 데이브. 그 요청을 수행할 수 없습니다.

3개의 좋아요

이 이슈를 기능 요청으로 이동했습니다. 기능 요청 내용은 다음과 같습니다:

재평가되는 배지를 100% 취소(회수)할 수 있도록 하기

또는

SQL 기반 / 반복 평가 배지의 취소(회수)를 관리자 권한으로 금지하기


현재 제 추천은 "하지 않는 것"이지만, 관리자 경험은 확실히 개선될 여지가 있습니다.

1개의 좋아요