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

Function GetMessagesList

api/controller/message.go:621–763  ·  view source on GitHub ↗

GetMessagesList 获取消息列表 @Summary 获取消息列表 @Description 获取消息列表,支持关键词、思考方式、回答状态、知识类型、日期范围、来源筛选,支持排序 @Tags Message @Accept json @Produce json @Security BearerAuth @Param keyword query string false "搜索关键词,支持在消息内容和回答内容中搜索" @Param file_keyword query string false "文件名搜索关键词,支持模糊搜索匹配的文件" @Param offset query int

(c *gin.Context)

Source from the content-addressed store, hash-verified

619// @Success 200 {object} model.CommonResponse{data=MessagesResponse} "Success"
620// @Router /api/messages/list [get]
621func GetMessagesList(c *gin.Context) {
622 var messageListRequest MessageListAllRequest
623 if err := c.ShouldBindQuery(&messageListRequest); err != nil {
624 c.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))
625 return
626 }
627
628 // 设置默认方向为从新到旧
629 if messageListRequest.Direction == "" {
630 messageListRequest.Direction = "desc"
631 }
632
633 // 手动解码 agent_id HashID(防止 RequestDecoder 未能正确解码的情况)
634 // 同时处理 ShouldBindQuery 解析失败的情况(agent_id 为 HashID 字符串时会导致绑定失败)
635 if agentIDStr := c.Query("agent_id"); agentIDStr != "" {
636 if id, err := hashids.TryParseID(agentIDStr); err == nil {
637 messageListRequest.AgentID = &id
638 }
639 }
640
641 eid := config.GetEID(c)
642 var fileIDs []int64
643 if messageListRequest.FileKeyword != "" {
644 // 执行文件名搜索逻辑
645 esClient := elasticsearch.GetGlobalClient()
646 if esClient != nil && !esClient.IsDisabled() {
647 // 创建文件搜索服务
648 esSearchService := elasticsearch.NewFileNameSearchService(esClient, model.DB)
649 // 构建搜索请求
650 searchReq := &elasticsearch.FileNameSearchRequest{
651 Query: messageListRequest.FileKeyword,
652 TopK: 1000, // 搜索足够多的文件 ID
653 }
654 // 执行搜索
655 response, err := esSearchService.Search(eid, searchReq)
656 if err != nil {
657 logger.SysLogf("GetMessagesList 文件名 ES 搜索失败: eid=%d, query=%s, err=%v", eid, messageListRequest.FileKeyword, err)
658 } else if len(response.Results) > 0 {
659 for _, res := range response.Results {
660 fileIDs = append(fileIDs, res.FileID)
661 }
662 }
663 }
664
665 // 如果 ES 没搜到或报错,尝试数据库降级搜索(仅当 fileIDs 为空时)
666 if len(fileIDs) == 0 {
667 var files []model.File
668 // 数据库 LIKE 搜索
669 if err := model.DB.Where("eid = ? AND is_deleted = ? AND path LIKE ?", eid, false, "%"+messageListRequest.FileKeyword+"%").Limit(1000).Find(&files).Error; err == nil {
670 for _, f := range files {
671 fileIDs = append(fileIDs, f.ID)
672 }
673 }
674 }
675
676 // 如果最终还是没搜到匹配的文件,说明该文件名下没有消息,直接返回空
677 if len(fileIDs) == 0 {
678 c.JSON(http.StatusOK, model.Success.ToResponse(&MessagesResponse{

Callers

nothing calls this directly

Calls 8

SearchMethod · 0.95
buildEnhancedMessagesFunction · 0.85
ToResponseMethod · 0.80
GetEIDMethod · 0.80
IsDisabledMethod · 0.80
WarnfMethod · 0.80
QueryMethod · 0.65

Tested by

no test coverage detected