Nima1
(Nima)
2 באוגוסט, 2025, 9:50am
1
אני מדווח על באג ב-API של תוסף Discourse Chat. בעת שאילתה לגבי הודעות צ’אט קודמות, הפרמטר page_size מתעלם, והקצה תמיד מחזיר את המספר המרבי של הודעות.
שלבים לשחזור:
בצע קריאת API לקצה הודעות הצ’אט (לדוגמה, /chat/{channel_id}/messages.json).
השתמש בפרמטרים הבאים בבקשה:
התנהגות צפויה: ה-API אמור להחזיר אובייקט JSON המכיל לכל היותר 5 הודעות שנשלחו לפני target_message_id שצוין.
התנהגות בפועל: ה-API מחזיר 50 הודעות, תוך התעלמות מהפרמטר page_size=5. נראה שהוא מקודד קשיח לגודל הדף המרבי בתרחיש זה.
תודה על הבדיקה!
2 לייקים
sam
(Sam Saffron)
3 באוגוסט, 2025, 11:49pm
2
Reading through the implementation this appears somewhat deliberate:
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
Perhaps @loic has some thoughts here.
2 לייקים
loic
(Loïc Guitaut)
5 באוגוסט, 2025, 10:31am
3
ניסיתי לשחזר את זה במשך זמן מה, אך לא הצלחתי לעשות זאת.
בדקתי את 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 לייקים
Nima1
(Nima)
6 באוגוסט, 2025, 10:41am
4
תודה על הבדיקה.
מתנצל, שכחתי לציין פרט חשוב: הבעיה הזו מתרחשת רק בערוצים שבהם השרשורים מופעלים . זו כנראה הסיבה שלא הצלחת לשחזר אותה.
הפרמטר page_size מתעלם כאשר אני מאחזר הודעות משרשור ספציפי. לדוגמה, כאשר אני משתמש בנקודת הקצה הזו עם page_size=5:
/chat/api/channels/64/threads/1526/messages?target_message_id=19205&page_size=5
ה-API מחזיר את 50 ההודעות ברירת המחדל במקום 5 המבוקשות, למרות שיש שפע של הודעות זמינות בשרשור. נראה שהבעיה ספציפית לנקודת הקצה של ה-API של השרשורים.
2 לייקים
loic
(Loïc Guitaut)
7 באוגוסט, 2025, 4:33pm
5
Found the bug! I was already refactoring that service a bit, so I included the fix in it:
main ← loic-refactor-list-channel-thread-messages
opened 03:12PM - 27 Jun 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)
נסגר ב־
10 באוגוסט, 2025, 10:11pm
6
נושא זה נסגר אוטומטית 3 ימים לאחר התגובה האחרונה. לא ניתן להוסיף תגובות חדשות.