Nima1
(Nima)
8월 2, 2025, 9:50오전
1
Discourse Chat 플러그인의 API 관련 버그를 보고합니다. 과거 채팅 메시지를 조회할 때 page_size 파라미터가 무시되고, 엔드포인트가 항상 최대 메시지 수를 반환합니다.
재현 방법:
채팅 메시지 엔드포인트에 API 호출을 수행합니다 (예: /chat/{channel_id}/messages.json).
요청에 다음 파라미터를 사용합니다:
기대되는 동작: API는 지정된 target_message_id보다 이전에 전송된 최대 5개의 메시지를 포함하는 JSON 객체를 반환해야 합니다.
실제 동작: API는 page_size=5 파라미터를 무시하고 50개의 메시지를 반환합니다. 이 시나리오에서 최대 페이지 크기로 하드코딩된 것으로 보입니다.
확인해 주셔서 감사합니다!
2개의 좋아요
sam
(Sam Saffron)
8월 3, 2025, 11:49오후
2
구현 코드를 살펴보면, 이는 일부러 그렇게 설계된 것으로 보입니다:
def fetch_metadata(channel:, guardian:, target_message_id:, params:)
::Chat::MessagesQuery.call(
channel:,
guardian:,
target_message_id:,
include_thread_messages: !channel.threading_enabled?,
**params.slice(:page_size, :direction, :target_date),
)
end
def fetch_messages(metadata:)
[
metadata[:messages],
metadata[:past_messages]&.reverse,
(metadata[:target_message] unless metadata[:target_message]&.thread_reply?),
metadata[:future_messages],
].flatten.compact
end
아마 @loic 님이 이 부분에 대해 몇 가지 생각이 있으실 것 같습니다.
2개의 좋아요
loic
(Loïc Guitaut)
8월 5, 2025, 10:31오전
3
재현을 시도해 봤지만, 재현하지는 못했습니다.
Chat::MessagesQuery, Chat::ListChannelMessages 및 컨트롤러 액션을 스펙을 통해 확인했고, 로컬 인스턴스에서 수동으로 테스트해 보기도 했습니다. page_size 매개변수와 direction 매개변수 모두 예상대로 올바르게 처리되고 있습니다.
@Nima1 올바른 엔드포인트를 사용하고 계신지 확인해 주실 수 있을까요? /chat/api/channels/3/messages?target_message_id=40&direction=past&page_size=5처럼 api가 포함되어야 합니다.
stable 환경에서는 동작이 다를 수 있는지 여부는 아직 확인하지 못했습니다. 인스턴스가 tests-passed 브랜치와 최신 상태인지 확인해 보세요.
2개의 좋아요
Nima1
(Nima)
8월 6, 2025, 10:41오전
4
확인해 주셔서 감사합니다.
죄송합니다. 중요한 세부 사항을 언급하는 것을 깜빡했습니다. 이 문제는 스레딩이 활성화된 채널에서만 발생합니다. 그것이 재현하지 못한 이유일 가능성이 높습니다.
특정 스레드에서 메시지를 가져올 때 page_size 매개변수가 무시됩니다. 예를 들어, 이 엔드포인트를 page_size=5로 사용할 때:
/chat/api/channels/64/threads/1526/messages?target_message_id=19205&page_size=5
스레드에 충분한 수의 메시지가 있음에도 불구하고, 요청한 5개 대신 기본값인 50개의 메시지가 반환됩니다. 문제가 스레드 API 엔드포인트에 특이한 것 같습니다.
2개의 좋아요
loic
(Loïc Guitaut)
8월 7, 2025, 4:33오후
5
버그를 찾았습니다! 해당 서비스를 이미 조금 리팩터링하고 있었기 때문에, 수정 사항을 그 안에 포함시켰습니다:
main ← loic-refactor-list-channel-thread-messages
merged 12:05PM - 08 Aug 25 UTC
- Introduce a `max_page_size` option, allowing different behavior between contro… llers and SDK.
- Improve the contract (validations & helper method).
- Use `model` where possible.
- Extract message existence logic to a dedicated policy, allowing easier testing.
- Refactor specs to follow current guidelines/best practices.
4개의 좋아요
j.jaffeux
(Joffrey Jaffeux)
에 닫힘
8월 10, 2025, 10:11오후
6
이 주제는 마지막 답변 후 3일이 지나 자동으로 닫혔습니다. 더 이상 새로운 답변을 할 수 없습니다.