Ei kuvausta
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

session_routes.go 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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/model/response"
  7. "git.x2erp.com/qdy/go-base/webx/router"
  8. "git.x2erp.com/qdy/go-svc-code/internal/opencode"
  9. )
  10. // SessionCreateRequest 创建会话请求
  11. type SessionCreateRequest struct {
  12. Title string `json:"title" binding:"required"`
  13. }
  14. // SessionResponse 会话响应
  15. type SessionResponse struct {
  16. ID string `json:"id"`
  17. Title string `json:"title"`
  18. Port int `json:"port"`
  19. BaseURL string `json:"baseURL"`
  20. }
  21. // RegisterSessionRoutes 注册会话管理路由
  22. func RegisterSessionRoutes(ws *router.RouterService, client opencode.OpenCodeClient) {
  23. // 创建会话(需要Token认证)
  24. ws.POST("/api/session/create",
  25. func(req *SessionCreateRequest, ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[SessionResponse], error) {
  26. session, err := client.CreateSession(ctx, req.Title)
  27. if err != nil {
  28. return &response.QueryResult[SessionResponse]{
  29. Success: false,
  30. Message: err.Error(),
  31. }, nil
  32. }
  33. return &response.QueryResult[SessionResponse]{
  34. Success: true,
  35. Data: SessionResponse{
  36. ID: session.ID,
  37. Title: session.Title,
  38. Port: client.GetPort(),
  39. BaseURL: client.GetBaseURL(),
  40. },
  41. }, nil
  42. },
  43. ).Use(authbase.TokenAuth).Desc("创建新的 opencode 会话").Register()
  44. // 获取会话列表(需要Token认证)
  45. ws.GET("/api/session/list",
  46. func(ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[[]opencode.Session], error) {
  47. sessions, err := client.ListSessions(ctx)
  48. if err != nil {
  49. return &response.QueryResult[[]opencode.Session]{
  50. Success: false,
  51. Message: err.Error(),
  52. }, nil
  53. }
  54. return &response.QueryResult[[]opencode.Session]{
  55. Success: true,
  56. Data: sessions,
  57. }, nil
  58. },
  59. ).Use(authbase.TokenAuth).Desc("获取 opencode 会话列表").Register()
  60. // 获取单个会话(暂不实现,因为 opencode API 可能不支持)
  61. // ws.GET("/api/session/get",
  62. // func(ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[opencode.Session], error) {
  63. // sessionID := reqCtx.GetQuery("id")
  64. // if sessionID == "" {
  65. // return &response.QueryResult[opencode.Session]{
  66. // Success: false,
  67. // Message: "参数 id 不能为空",
  68. // }, nil
  69. // }
  70. // session, err := client.GetSession(ctx, sessionID)
  71. // if err != nil {
  72. // return &response.QueryResult[opencode.Session]{
  73. // Success: false,
  74. // Message: err.Error(),
  75. // }, nil
  76. // }
  77. //
  78. // return &response.QueryResult[opencode.Session]{
  79. // Success: true,
  80. // Data: *session,
  81. // }, nil
  82. // },
  83. // ).Desc("获取 opencode 会话详情").Register()
  84. }