버그: reaction과 reaction-received에서 다음 페이지가 로드되지 않음

활동/알림의 반응/반응-수신 페이지에 버그가 있습니다.

사용자가 아래로 스크롤하여 다음 페이지를 로드할 때, 동일한 항목이 목록에 추가되어 중복이 발생합니다.

이 문제는 프론트엔드와 백엔드 간의 불일치에서 비롯됩니다. 프론트엔드에서 정의된 idpost_id인 반면, 백엔드에서는 reaction_id가 필요합니다.

초안 PR이 여기에 있습니다. 가능하시다면 검토해 주세요.

3개의 좋아요

초안 PR을 올려주셔서 감사합니다. 현재 리액션의 페이지네이션이 부정확하고 반복되는 것처럼 보입니다.

올바른 수정 방법이 post_id를 설정하는 것인지는 확실하지 않습니다. 페이지네이션은 before_reaction_user_id를 사용하는 것으로 보입니다 (여기 참조). 또한 위에서 이미 평탄화된 reaction에 설정되어 있을 가능성이 있으므로, 27번째 줄(PR)을 제거하는 것도 도움이 될 수 있습니다.

1개의 좋아요

답변 감사합니다.
내일 확인해 보고 그 문제를 해결할 수 있는지 알아보겠습니다.

1개의 좋아요

좋아요, 감사합니다!

정리하자면, before_reaction_user_iddiscourse_reactions_reaction_users 테이블의 id여야 한다고 생각합니다. 변수 이름이 다소 혼란스러울 수 있습니다. 여기나 채팅에서 자유롭게 설명해 주세요.

1개의 좋아요

조사해 보았더니 rspec가 실패한 원인을 찾았습니다.

원래 스펙은 expect(page).to have_css(".user-stream-item [data-post-id='#{post_1.id}']") 속성을 가진 컴포넌트를 검증하고 있습니다.

하지만 마지막 커밋에서 data-post-idreaction_user_id로 변경되어 불일치가 발생했고, 이로 인해 테스트가 실패하게 되었습니다.


원래 의도는 API 요구사항에 맞게 id를 변경하는 것이었습니다. 그러나 id가 PostList에서도 post_id로 사용된다는 사실을 간과했습니다. 예를 들어 다음과 같습니다:

<PostList
    @posts={{@model}}
    @fetchMorePosts={{@controller.loadMore}}
    @emptyText={{i18n "notifications.empty"}}
    @additionalItemClasses="user-stream-item"
    @showUserInfo={{false}}
    class="user-stream"
  >

그리고 여기서 사용되는 idpost.gjs 컴포넌트에서 다음과 같이 매핑됩니다.

data-post-id={{@post.id}}
data-topic-id={{@post.topicId}}
data-user-id={{@post.user_id}}

따라서 postList에서 심각한 불일치를 유발하여 어제 rspec 실패로 직결될 수 있으므로, 원래 id의 동작은 변경해서는 안 됩니다.


대안으로, 이를 해결할 다른 방법이 있을 수 있습니다:

flattenForPostListreaction_user_id: reaction.id라는 새 필드를 추가하고, #getLastIdFrom(array) 함수의 return array.length ? array[array.length - 1].id : null;return array.length ? array[array.length - 1].reaction_user_id로 수정하는 것입니다.


요약하자면:

reaction_id, post_id, 그리고 이제 reaction_user_id는 완전히 다른 값들입니다. 하지만 postList 컴포넌트에서 사용되는 idpost_id여야 합니다. 반면 다음 페이지를 가져오기 위해 필요한 idreaction_user_id여야 하는데, 이는 매우 혼란스러운 상황입니다.

@nat

조사해 주시고 PR 올려주셔서 감사합니다 @small-lovely-cat :+1:

PR에 스펙을 추가했고, 머지를 진행하겠습니다.

2개의 좋아요

이 주제는 19시간 후 자동으로 닫혔습니다. 새로운 답글은 더 이상 허용되지 않습니다.