plane_v2_api_handlers.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. package data
  2. import (
  3. "context"
  4. "github.com/mark3labs/mcp-go/mcp"
  5. "fwh-toolbox-server/cmd/mcp/tools/helper"
  6. )
  7. // === Workspace Handlers ===
  8. func handlePlaneV2ListWorkspaces(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  9. data, err := planeV2.ListWorkspaces()
  10. return planeRawResult(data, err, "列出工作空间")
  11. }
  12. func handlePlaneV2GetWorkspace(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  13. data, err := planeV2.GetWorkspace(planeV2Workspace)
  14. return planeRawResult(data, err, "获取工作空间详情")
  15. }
  16. // === Project Handlers ===
  17. func handlePlaneV2ListProjects(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  18. data, err := planeV2.ListProjects(planeV2Workspace)
  19. return planeRawResult(data, err, "列出项目")
  20. }
  21. func handlePlaneV2GetProject(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  22. id, err := req.RequireString("project_id")
  23. if err != nil {
  24. return helper.ParamError("project_id"), nil
  25. }
  26. data, apiErr := planeV2.GetProject(planeV2Workspace, id)
  27. return planeRawResult(data, apiErr, "获取项目详情")
  28. }
  29. // === Issue Handlers ===
  30. func handlePlaneV2ListIssues(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  31. data, err := planeV2.ListIssues(planeV2Workspace, planeV2Project)
  32. return planeRawResult(data, err, "列出工作项")
  33. }
  34. func handlePlaneV2GetIssue(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  35. id, err := req.RequireString("issue_id")
  36. if err != nil {
  37. return helper.ParamError("issue_id"), nil
  38. }
  39. data, apiErr := planeV2.GetIssue(planeV2Workspace, planeV2Project, id)
  40. return planeRawResult(data, apiErr, "获取工作项详情")
  41. }
  42. func handlePlaneV2GetSubIssues(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  43. id, err := req.RequireString("issue_id")
  44. if err != nil {
  45. return helper.ParamError("issue_id"), nil
  46. }
  47. data, apiErr := planeV2.GetSubIssues(planeV2Workspace, planeV2Project, id)
  48. return planeRawResult(data, apiErr, "获取子工作项")
  49. }
  50. func handlePlaneV2GetIssueActivity(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  51. id, err := req.RequireString("issue_id")
  52. if err != nil {
  53. return helper.ParamError("issue_id"), nil
  54. }
  55. data, apiErr := planeV2.GetIssueActivity(planeV2Workspace, planeV2Project, id)
  56. return planeRawResult(data, apiErr, "获取工作项活动历史")
  57. }
  58. // === Cycle Handlers ===
  59. func handlePlaneV2ListCycles(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  60. data, err := planeV2.ListCycles(planeV2Workspace, planeV2Project)
  61. return planeRawResult(data, err, "列出周期")
  62. }
  63. func handlePlaneV2GetCycle(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  64. id, err := req.RequireString("cycle_id")
  65. if err != nil {
  66. return helper.ParamError("cycle_id"), nil
  67. }
  68. data, apiErr := planeV2.GetCycle(planeV2Workspace, planeV2Project, id)
  69. return planeRawResult(data, apiErr, "获取周期详情")
  70. }
  71. func handlePlaneV2ListCycleIssues(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  72. id, err := req.RequireString("cycle_id")
  73. if err != nil {
  74. return helper.ParamError("cycle_id"), nil
  75. }
  76. data, apiErr := planeV2.ListCycleIssues(planeV2Workspace, planeV2Project, id)
  77. return planeRawResult(data, apiErr, "列出周期工作项")
  78. }
  79. // === Module Handlers ===
  80. func handlePlaneV2ListModules(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  81. data, err := planeV2.ListModules(planeV2Workspace, planeV2Project)
  82. return planeRawResult(data, err, "列出模块")
  83. }
  84. func handlePlaneV2GetModule(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  85. id, err := req.RequireString("module_id")
  86. if err != nil {
  87. return helper.ParamError("module_id"), nil
  88. }
  89. data, apiErr := planeV2.GetModule(planeV2Workspace, planeV2Project, id)
  90. return planeRawResult(data, apiErr, "获取模块详情")
  91. }
  92. func handlePlaneV2ListModuleIssues(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  93. id, err := req.RequireString("module_id")
  94. if err != nil {
  95. return helper.ParamError("module_id"), nil
  96. }
  97. data, apiErr := planeV2.ListModuleIssues(planeV2Workspace, planeV2Project, id)
  98. return planeRawResult(data, apiErr, "列出模块工作项")
  99. }
  100. // === Label Handlers ===
  101. func handlePlaneV2ListLabels(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  102. data, err := planeV2.ListLabels(planeV2Workspace, planeV2Project)
  103. return planeRawResult(data, err, "列出标签")
  104. }
  105. func handlePlaneV2GetLabel(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  106. id, err := req.RequireString("label_id")
  107. if err != nil {
  108. return helper.ParamError("label_id"), nil
  109. }
  110. data, apiErr := planeV2.GetLabel(planeV2Workspace, planeV2Project, id)
  111. return planeRawResult(data, apiErr, "获取标签详情")
  112. }
  113. // === State Handlers ===
  114. func handlePlaneV2ListStates(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  115. data, err := planeV2.ListStates(planeV2Workspace, planeV2Project)
  116. return planeRawResult(data, err, "列出状态")
  117. }
  118. func handlePlaneV2GetState(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  119. id, err := req.RequireString("state_id")
  120. if err != nil {
  121. return helper.ParamError("state_id"), nil
  122. }
  123. data, apiErr := planeV2.GetState(planeV2Workspace, planeV2Project, id)
  124. return planeRawResult(data, apiErr, "获取状态详情")
  125. }
  126. // === Comment Handlers ===
  127. func handlePlaneV2ListComments(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  128. id, err := req.RequireString("issue_id")
  129. if err != nil {
  130. return helper.ParamError("issue_id"), nil
  131. }
  132. data, apiErr := planeV2.ListComments(planeV2Workspace, planeV2Project, id)
  133. return planeRawResult(data, apiErr, "列出评论")
  134. }
  135. func handlePlaneV2GetComment(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  136. issueID, err := req.RequireString("issue_id")
  137. if err != nil {
  138. return helper.ParamError("issue_id"), nil
  139. }
  140. commentID, err := req.RequireString("comment_id")
  141. if err != nil {
  142. return helper.ParamError("comment_id"), nil
  143. }
  144. data, apiErr := planeV2.GetComment(planeV2Workspace, planeV2Project, issueID, commentID)
  145. return planeRawResult(data, apiErr, "获取评论详情")
  146. }
  147. // === Link Handlers ===
  148. func handlePlaneV2ListIssueLinks(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  149. id, err := req.RequireString("issue_id")
  150. if err != nil {
  151. return helper.ParamError("issue_id"), nil
  152. }
  153. data, apiErr := planeV2.ListIssueLinks(planeV2Workspace, planeV2Project, id)
  154. return planeRawResult(data, apiErr, "列出工作项链接")
  155. }
  156. // === Relation Handlers ===
  157. func handlePlaneV2ListIssueRelations(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  158. id, err := req.RequireString("issue_id")
  159. if err != nil {
  160. return helper.ParamError("issue_id"), nil
  161. }
  162. data, apiErr := planeV2.ListIssueRelations(planeV2Workspace, planeV2Project, id)
  163. return planeRawResult(data, apiErr, "列出工作项关联")
  164. }
  165. // === Sticky Handlers ===
  166. func handlePlaneV2ListStickies(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  167. data, err := planeV2.ListStickies(planeV2Workspace)
  168. return planeRawResult(data, err, "列出便签")
  169. }
  170. func handlePlaneV2GetSticky(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  171. id, err := req.RequireString("sticky_id")
  172. if err != nil {
  173. return helper.ParamError("sticky_id"), nil
  174. }
  175. data, apiErr := planeV2.GetSticky(planeV2Workspace, id)
  176. return planeRawResult(data, apiErr, "获取便签详情")
  177. }
  178. // === Intake Handlers ===
  179. func handlePlaneV2ListIntakeIssues(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  180. status := req.GetString("status", "")
  181. data, err := planeV2.ListIntakeIssues(planeV2Workspace, planeV2Project, status)
  182. return planeRawResult(data, err, "列出收件箱工作项")
  183. }
  184. func handlePlaneV2GetIntakeIssue(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  185. id, err := req.RequireString("issue_id")
  186. if err != nil {
  187. return helper.ParamError("issue_id"), nil
  188. }
  189. data, apiErr := planeV2.GetIntakeIssue(planeV2Workspace, planeV2Project, id)
  190. return planeRawResult(data, apiErr, "获取收件箱工作项详情")
  191. }
  192. // === Asset Handlers ===
  193. func handlePlaneV2GetProjectAssetURL(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  194. id, err := req.RequireString("asset_id")
  195. if err != nil {
  196. return helper.ParamError("asset_id"), nil
  197. }
  198. url, apiErr := planeV2.GetProjectAssetURL(planeV2Workspace, planeV2Project, id)
  199. if apiErr != nil {
  200. return helper.ServiceError("获取资源URL", apiErr), nil
  201. }
  202. return helper.TextResult(url), nil
  203. }
  204. // === Page Handlers ===
  205. func handlePlaneV2ListPages(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  206. data, err := planeV2.ListPages(planeV2Workspace, planeV2Project)
  207. return planeRawResult(data, err, "列出页面")
  208. }
  209. func handlePlaneV2GetPage(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  210. id, err := req.RequireString("page_id")
  211. if err != nil {
  212. return helper.ParamError("page_id"), nil
  213. }
  214. data, apiErr := planeV2.GetPage(planeV2Workspace, planeV2Project, id)
  215. return planeRawResult(data, apiErr, "获取页面详情")
  216. }
  217. func handlePlaneV2GetPageDescription(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  218. id, err := req.RequireString("page_id")
  219. if err != nil {
  220. return helper.ParamError("page_id"), nil
  221. }
  222. data, apiErr := planeV2.GetPageDescription(planeV2Workspace, planeV2Project, id)
  223. return planeRawResult(data, apiErr, "获取页面描述")
  224. }
  225. // === Member Handlers ===
  226. func handlePlaneV2ListWorkspaceMembers(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  227. data, err := planeV2.ListWorkspaceMembers(planeV2Workspace)
  228. return planeRawResult(data, err, "列出工作空间成员")
  229. }
  230. func handlePlaneV2GetWorkspaceMember(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  231. id, err := req.RequireString("member_id")
  232. if err != nil {
  233. return helper.ParamError("member_id"), nil
  234. }
  235. data, apiErr := planeV2.GetWorkspaceMember(planeV2Workspace, id)
  236. return planeRawResult(data, apiErr, "获取工作空间成员详情")
  237. }
  238. func handlePlaneV2ListProjectMembers(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  239. data, err := planeV2.ListProjectMembers(planeV2Workspace, planeV2Project)
  240. return planeRawResult(data, err, "列出项目成员")
  241. }
  242. func handlePlaneV2GetProjectMember(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  243. id, err := req.RequireString("member_id")
  244. if err != nil {
  245. return helper.ParamError("member_id"), nil
  246. }
  247. data, apiErr := planeV2.GetProjectMember(planeV2Workspace, planeV2Project, id)
  248. return planeRawResult(data, apiErr, "获取项目成员详情")
  249. }