Chat API: параметр page_size игнорируется при direction=past

Сообщаю об ошибке в API плагина Discourse Chat. При запросе прошлых сообщений чата параметр page_size игнорируется, и конечная точка всегда возвращает максимальное количество сообщений.

Шаги для воспроизведения:

  1. Выполните API-запрос к конечной точке сообщений чата (например, /chat/{channel_id}/messages.json).

  2. Используйте следующие параметры в запросе:

    • target_message_id: [ID последнего сообщения]

    • direction: past

    • page_size: 5 (или любое число меньше 50)

Ожидаемое поведение: API должен возвращать JSON-объект, содержащий не более 5 сообщений, отправленных до указанного target_message_id.

Фактическое поведение: API возвращает 50 сообщений, игнорируя параметр page_size=5. Похоже, что в данном случае максимальный размер страницы зашит в код.

Спасибо за рассмотрение этого вопроса!

2 лайка

При изучении реализации это кажется намеренным:

Возможно, у @loic есть какие-то мысли по этому поводу.

2 лайка

Я потратил некоторое время на попытку воспроизвести проблему, но мне это не удалось.

Я проверил Chat::MessagesQuery, Chat::ListChannelMessages и действие контроллера как через спецификации, так и вручную на локальном экземпляре. Параметр page_size учитывается, как и ожидалось, как и параметр direction.

@Nima1, вы уверены, что используете правильный эндпоинт? В нём должно быть api, например: /chat/api/channels/3/messages?target_message_id=40&direction=past&page_size=5.

Ещё один момент, который я не проверял, — отличается ли поведение на ветке stable. Ваша версия актуальна относительно ветки tests-passed?

2 лайка

Спасибо, что взялись за это.

Прошу прощения, я забыл упомянуть важный нюанс: эта проблема возникает только в каналах, где включена функция потоков. Вероятно, именно поэтому вам не удалось её воспроизвести.

Параметр page_size игнорируется при получении сообщений из конкретного потока. Например, когда я использую эту конечную точку с page_size=5:

/chat/api/channels/64/threads/1526/messages?target_message_id=19205&page_size=5

API возвращает стандартные 50 сообщений вместо запрошенных 5, хотя в потоке доступно достаточно сообщений. Похоже, проблема специфична для конечной точки API потоков.

2 лайка

Нашел ошибку! Я как раз немного рефакторил этот сервис, поэтому включил исправление в него:

4 лайка

Эта тема была автоматически закрыта через 3 дня после последнего ответа. Новые ответы больше не принимаются.