좋아요 수가 없으면 반응이 표시되지 않는 경우 있음

@JammyDodger 님이 모바일에서 이 게시글의 리액션을 볼 수 없다는 점을 발견했습니다: ToS and Privacy buttons disappear from /about when I remove my custom FAQ URL - #3 by Canapin [예시1]

Jammy (모바일) - 리액션 없음:

Jammy (데스크톱) - 왼쪽에는 리액션이 보이지만 오른쪽에는 없음:

기타 사용자 - 리액션을 한 것이 보이고, 모든 것이 정상적으로 작동함:

리액션 활동을 검색해 보다가 내 경우에도 문제가 발생하는 예시를 찾았습니다: Admins may not realize certain sidebar customization are global - #8 by JammyDodger [예시2]

두 게시글의 공통점은 리액션이 존재하지만, 좋아요 수가 actions_summary의 카운트로 표시되지 않는다는 것입니다.

게시글에 직접 리액션을 했는지 여부에 따라 id: 2actions_summary에서 누락되거나, 리액션을 하지 않은 경우 카운트가 누락된 것을 볼 수 있습니다. 제 이해가 맞다면, id: 2는 사용자가 리액션을 할 수 있는 경우(can_act) 또는 count가 0보다 큰 경우에 포함됩니다.

두 사용자가 리액션을 한 예시2 게시글의 JSON https://meta.discourse.org/posts/1404583.json을 자세히 살펴보니, 이 카운트가 누락되어 있습니다:

리액션하지 않은 사용자
can_act true
리액션한 사용자
id 2 없음

이 경우, 두 사용자 모두에게 count: 2가 누락됩니다. 이미 리액션을 한 사용자의 경우 이는 id: 2가 완전히 누락되는 결과를 초래합니다. 이는 리액션이 존재함에도 불구하고 리액션을 한 사용자에게 리액션이 표시되지 않는 이유를 설명하는 것 같습니다.

비교를 위해, 카운트가 예상대로 표시되는 두 개의 리액션이 있는 게시글을 가져왔습니다: Buttons to order items in emoji list settings is difficult to find on touch devices - #2 by zogstrip 그리고 해당 게시글의 JSON: https://meta.discourse.org/posts/1907506.json

리액션하지 않은 사용자
can_act true
리액션한 사용자
acted true

이 게시글에서는 카운트가 사용 가능하고 리액션이 예상대로 표시됩니다.

Meta에서 이 문제로 인해 영향을 받는 게시글이 얼마나 되는지, 또는 다른 포럼도 영향을 받는지는 알 수 없습니다. 또한 데이터가 누락되는 이유에 대한 단계적인 설명을 제공할 수도 없습니다. 단지 일부 게시글에서 모바일 폰에서는 리액션이 표시되지 않고 노트북에서는 부분적으로만 표시되며, 그 원인이 누락된 데이터와 관련이 있는 것으로 보인다는 것만 보고할 수 있습니다.

5개의 좋아요

조사를 시작했고, 여기 작업 중인 수정안이 있습니다

1개의 좋아요

이 문제가 어떻게 발생했는지 파악할 수 있었나요? 저는 2023년과 2024년 초의 예시만 찾았습니다. 그래서 모든 리액션이 좋아요로 집계되기 전의 데이터와 그 변경 이후의 데이터 사이에 차이가 있는지 궁금해졌습니다.
그래서 좋아요 집계에서 제외되는 리액션을 사용해 보았지만, current_user_reaction의 "can_undo"가 false여도 "can_act"는 여전히 true로 나타났습니다.

discourse_reactions_like_sync_enabled이 **false**로 설정되어 있기 때문입니다. 이는 2024년 5월 마이그레이션을 통해 기존 데이터를 교란하지 않기 위해 의도적으로 수행되었습니다.

이 설정이 비활성화되면 ReactionLikeSynchronizer가 실행되지 않습니다. 이 동기화기는 다음 역할을 담당합니다:

  • 리액션에 대한 PostAction(좋아요) 레코드를 생성합니다.
  • 리액션을 반영하도록 posts.like_count를 업데이트합니다.

동기화가 실행되지 않으면:

  1. 리액션은 discourse_reactions_reaction_users에 존재합니다.
  2. 그러나 이에 해당하는 PostAction 레코드는 없습니다.
  3. 그리고 posts.like_count는 0으로 유지됩니다.

타이밍에 대한 직관이 정확합니다. 2023년/2024년 초 게시글에는 이 동기화가 활성화되지 않았을 때 리액션이 추가되었기 때문에, 해당 게시글의 like_count는 업데이트되지 않았습니다. 이후 구버전 직렬화기 로직은 count = 0이면서 can_act = false(취소 창 만료)인 경우 좋아요 액션을 완전히 생략했습니다.

해결 방법은 근본적인 데이터 불일치를 수정하는 것이 아니라, PostAction/like_count 데이터가 동기화되지 않았더라도 UI가 리액션을 올바르게 표시하도록 보장하는 것입니다. discourse_reactions_like_sync_enabled = false인 사이트에서는 PostAction 레코드와 독립적으로 리액션이 존재하는 것이 예상되는 동작입니다.

1개의 좋아요

이 주제는 20시간 후 자동으로 닫혔습니다. 더 이상 새 답변을 작성할 수 없습니다.