説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

session_messages_routes.go 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package routes
  2. import (
  3. "context"
  4. "git.x2erp.com/qdy/go-base/authbase"
  5. "git.x2erp.com/qdy/go-base/ctx"
  6. "git.x2erp.com/qdy/go-base/logger"
  7. "git.x2erp.com/qdy/go-base/model/response"
  8. "git.x2erp.com/qdy/go-base/webx/router"
  9. "git.x2erp.com/qdy/go-svc-code/internal/opencode"
  10. )
  11. // GetSessionMessagesRequest 获取会话消息请求
  12. type GetSessionMessagesRequest struct {
  13. SessionID string `json:"sessionID" binding:"required"`
  14. Limit int `json:"limit,omitempty"`
  15. }
  16. // SessionMessagesResponse 会话消息响应
  17. type SessionMessagesResponse struct {
  18. Messages []opencode.SessionMessage `json:"messages"`
  19. Count int `json:"count"`
  20. }
  21. // RegisterSessionMessagesRoutes 注册会话消息路由
  22. func RegisterSessionMessagesRoutes(ws *router.RouterService, client opencode.OpenCodeClient) {
  23. // 获取会话消息历史(需要Token认证)
  24. ws.POST("/api/session/messages",
  25. func(req *GetSessionMessagesRequest, ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[SessionMessagesResponse], error) {
  26. // 检查请求参数是否为nil
  27. if req == nil {
  28. logger.Error("获取会话消息请求参数为nil")
  29. return &response.QueryResult[SessionMessagesResponse]{
  30. Success: false,
  31. Message: "请求参数不能为空",
  32. }, nil
  33. }
  34. // 检查sessionID是否为空
  35. if req.SessionID == "" {
  36. return &response.QueryResult[SessionMessagesResponse]{
  37. Success: false,
  38. Message: "参数 sessionID 不能为空",
  39. }, nil
  40. }
  41. // 检查客户端是否可用
  42. if client == nil {
  43. logger.Error("opencode客户端未初始化", "session_id", req.SessionID)
  44. return &response.QueryResult[SessionMessagesResponse]{
  45. Success: false,
  46. Message: "服务内部错误: opencode客户端未初始化",
  47. }, nil
  48. }
  49. // 调用 opencode 客户端获取消息
  50. messages, err := client.GetSessionMessages(ctx, req.SessionID, req.Limit)
  51. if err != nil {
  52. logger.Error("获取会话消息失败", "session_id", req.SessionID, "error", err)
  53. return &response.QueryResult[SessionMessagesResponse]{
  54. Success: false,
  55. Message: "获取会话消息失败: " + err.Error(),
  56. }, nil
  57. }
  58. return &response.QueryResult[SessionMessagesResponse]{
  59. Success: true,
  60. Data: SessionMessagesResponse{
  61. Messages: messages,
  62. Count: len(messages),
  63. },
  64. }, nil
  65. },
  66. ).Use(authbase.TokenAuth).Desc("获取指定会话的消息历史").Register()
  67. }