MCPcopy Create free account
hub / github.com/53AI/53AIHub / GetMessagesByConversation

Function GetMessagesByConversation

api/controller/message.go:404–512  ·  view source on GitHub ↗

@Summary Get messages by conversation ID @Description Get message list by conversation ID with pagination and keyword search. 返回的消息包含RAG检索统计数据(如果存在) @Tags Message @Accept json @Produce json @Security BearerAuth @Param conversation_id path int true "Conversation ID" @Param keyword query string false

(c *gin.Context)

Source from the content-addressed store, hash-verified

402// @Success 200 {object} model.CommonResponse{data=MessagesResponse} "Success"
403// @Router /api/conversations/{conversation_id}/messages [get]
404func GetMessagesByConversation(c *gin.Context) {
405 conversation_id, err := parseConversationIDParam(c.Param("conversation_id"))
406 if err != nil {
407 c.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))
408 return
409 }
410
411 var messageListRequest MessageListRequest
412 if err := c.ShouldBindQuery(&messageListRequest); err != nil {
413 c.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))
414 return
415 }
416
417 // 默认 desc 取最新 N 条(ORDER BY id DESC),返回前反转保证前端收到正序。
418 // 注意:反转必须在 fileMap/processRecordMap 等后续处理之前执行,
419 // 否则增强消息的顺序会与最终返回不一致。
420 if messageListRequest.Direction == "" {
421 messageListRequest.Direction = "desc"
422 }
423
424 eid := config.GetEID(c)
425 var messages []*model.Message
426 var count int64
427
428 var getConversation func() error
429 if common.IsAdmin(c) {
430 getConversation = func() error {
431 _, err := model.AdminGetConversationByID(eid, conversation_id)
432 return err
433 }
434 } else {
435 getConversation = func() error {
436 _, err := model.GetConversationByIDWithVisitor(eid, config.GetUserId(c), conversation_id, session.GetVisitorID(c))
437 return err
438 }
439 }
440
441 if err := getConversation(); err != nil {
442 c.JSON(http.StatusNotFound, model.NotFound.ToResponse(err))
443 return
444 }
445
446 // 传递方向参数到模型层
447 count, messages, err = model.GetMessagesByConversationIDWithDirectionWithVisitor(
448 eid, conversation_id,
449 messageListRequest.Keyword, session.GetVisitorID(c), messageListRequest.Limit, messageListRequest.Offset,
450 messageListRequest.Direction)
451
452 if err != nil {
453 c.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))
454 return
455 }
456
457 // desc 取数后反转,前端始终收到正序(最早的消息在前)。
458 // 反转必须在增强消息构建之前执行,以保证 fileMap/processRecordMap 与消息顺序一致。
459 if messageListRequest.Direction == "desc" {
460 for i, j := 0, len(messages)-1; i < j; i, j = i+1, j-1 {
461 messages[i], messages[j] = messages[j], messages[i]

Callers

nothing calls this directly

Calls 6

parseConversationIDParamFunction · 0.85
buildEnhancedMessagesFunction · 0.85
ToResponseMethod · 0.80
GetEIDMethod · 0.80
WarnfMethod · 0.80

Tested by

no test coverage detected