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

Function GetUserMessages

api/controller/message.go:330–389  ·  view source on GitHub ↗

@Summary Get messages by user and agent @Description Get messages between user and specific agent with pagination and keyword search. 返回的消息包含RAG检索统计数据(如果存在) @Tags Message @Accept json @Produce json @Security BearerAuth @Param agent_id path int true "Agent ID" @Param user_id path int true "User ID" @

(c *gin.Context)

Source from the content-addressed store, hash-verified

328// @Success 200 {object} model.CommonResponse{data=MessagesResponse} "Success"
329// @Router /api/users/{user_id}/agents/{agent_id}/messages [get]
330func GetUserMessages(c *gin.Context) {
331 agent_id, err := strconv.ParseInt(c.Param("agent_id"), 10, 64)
332 if err != nil {
333 c.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))
334 return
335 }
336
337 user_id, err := strconv.ParseInt(c.Param("user_id"), 10, 64)
338 if err != nil {
339 c.JSON(http.StatusBadRequest, model.ParamError.ToResponse(nil))
340 return
341 }
342 user, err := model.GetUserByID(user_id)
343 if err != nil {
344 c.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))
345 return
346 }
347
348 if user.Eid != config.GetEID(c) {
349 c.JSON(http.StatusForbidden, model.NotFound.ToResponse(nil))
350 return
351 }
352
353 var messageListRequest MessageListRequest
354 if err := c.ShouldBindQuery(&messageListRequest); err != nil {
355 c.JSON(http.StatusBadRequest, model.ParamError.ToResponse(err))
356 return
357 }
358
359 eid := config.GetEID(c)
360 count, messages, err := model.GetMessagesByUserAndAgentWithVisitor(
361 eid, user_id, agent_id,
362 messageListRequest.Keyword, messageListRequest.FileID, session.GetVisitorID(c), messageListRequest.Limit, messageListRequest.Offset)
363 if err != nil {
364 c.JSON(http.StatusInternalServerError, model.DBError.ToResponse(err))
365 return
366 }
367
368 // 批量获取文件名,避免 N+1 查询
369 fileMap := make(map[int64]string)
370 var targetFileIDs []int64
371 for _, msg := range messages {
372 if msg.FileID > 0 {
373 targetFileIDs = append(targetFileIDs, msg.FileID)
374 }
375 }
376 if len(targetFileIDs) > 0 {
377 var files []model.File
378 if err := model.DB.Select("id, path").Where("id IN ?", targetFileIDs).Find(&files).Error; err == nil {
379 for _, f := range files {
380 fileMap[f.ID] = model.ExtractSimpleFileName(f.Path)
381 }
382 }
383 }
384
385 c.JSON(http.StatusOK, model.Success.ToResponse(&MessagesResponse{
386 Count: count,
387 Messages: convertToEnhancedMessages(messages, fileMap),

Callers

nothing calls this directly

Calls 3

ToResponseMethod · 0.80
GetEIDMethod · 0.80

Tested by

no test coverage detected