@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)
| 402 | // @Success 200 {object} model.CommonResponse{data=MessagesResponse} "Success" |
| 403 | // @Router /api/conversations/{conversation_id}/messages [get] |
| 404 | func 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] |
nothing calls this directly
no test coverage detected