feedback_service.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package plane_v2
  2. // FeedbackPlaneService Feedback 专用的 Plane 服务(绑定固定的 workspace/project/labels)
  3. // 封装通用 PlaneService,调用方无需重复传入 workspace/project 参数
  4. type FeedbackPlaneService struct {
  5. *PlaneService
  6. WorkspaceSlug string
  7. ProjectId string
  8. LabelBugId string
  9. LabelFeatureId string
  10. LabelFeedbackId string
  11. }
  12. // NewFeedbackPlaneService 创建 Feedback 专用 PlaneService(须先调用 InitPlaneClient)
  13. func NewFeedbackPlaneService(workspaceSlug, projectId, labelBugId, labelFeatureId, labelFeedbackId string) *FeedbackPlaneService {
  14. return &FeedbackPlaneService{
  15. PlaneService: NewPlaneService(),
  16. WorkspaceSlug: workspaceSlug,
  17. ProjectId: projectId,
  18. LabelBugId: labelBugId,
  19. LabelFeatureId: labelFeatureId,
  20. LabelFeedbackId: labelFeedbackId,
  21. }
  22. }
  23. // ============ Intake 便捷方法(绑定 workspace/project)============
  24. func (f *FeedbackPlaneService) CreateIntakeIssue(issue IntakeIssueRequest) (*IntakeIssueResponse, error) {
  25. return f.PlaneService.CreateIntakeIssue(f.WorkspaceSlug, f.ProjectId, issue)
  26. }
  27. func (f *FeedbackPlaneService) ListIntakeIssues(status string) ([]byte, error) {
  28. return f.PlaneService.ListIntakeIssues(f.WorkspaceSlug, f.ProjectId, status)
  29. }
  30. func (f *FeedbackPlaneService) GetIntakeIssue(issueID string) ([]byte, error) {
  31. return f.PlaneService.GetIntakeIssue(f.WorkspaceSlug, f.ProjectId, issueID)
  32. }
  33. func (f *FeedbackPlaneService) UpdateIntakeIssue(issueID string, data map[string]any) ([]byte, error) {
  34. return f.PlaneService.UpdateIntakeIssue(f.WorkspaceSlug, f.ProjectId, issueID, data)
  35. }
  36. func (f *FeedbackPlaneService) AcceptIntakeIssue(issueID string) ([]byte, error) {
  37. return f.PlaneService.AcceptIntakeIssue(f.WorkspaceSlug, f.ProjectId, issueID)
  38. }
  39. func (f *FeedbackPlaneService) RejectIntakeIssue(issueID string) ([]byte, error) {
  40. return f.PlaneService.RejectIntakeIssue(f.WorkspaceSlug, f.ProjectId, issueID)
  41. }
  42. func (f *FeedbackPlaneService) DeleteIntakeIssue(issueID string) error {
  43. return f.PlaneService.DeleteIntakeIssue(f.WorkspaceSlug, f.ProjectId, issueID)
  44. }
  45. // ============ Asset 便捷方法(绑定 workspace/project)============
  46. func (f *FeedbackPlaneService) UploadProjectAsset(fileName, mimeType string, fileData []byte, entityType string) (*AssetUploadResult, error) {
  47. return f.PlaneService.UploadProjectAsset(f.WorkspaceSlug, f.ProjectId, fileName, mimeType, fileData, entityType)
  48. }
  49. func (f *FeedbackPlaneService) CreateProjectAsset(fileName, mimeType string, size int64, entityType string) (*AssetUploadResult, error) {
  50. return f.PlaneService.CreateProjectAsset(f.WorkspaceSlug, f.ProjectId, fileName, mimeType, size, entityType)
  51. }
  52. func (f *FeedbackPlaneService) ConfirmProjectAssetUpload(assetID string) error {
  53. return f.PlaneService.ConfirmProjectAssetUpload(f.WorkspaceSlug, f.ProjectId, assetID)
  54. }
  55. func (f *FeedbackPlaneService) GetProjectAssetURL(assetID string) (string, error) {
  56. return f.PlaneService.GetProjectAssetURL(f.WorkspaceSlug, f.ProjectId, assetID)
  57. }
  58. func (f *FeedbackPlaneService) GetProjectAsset(assetID string) ([]byte, error) {
  59. return f.PlaneService.GetProjectAsset(f.WorkspaceSlug, f.ProjectId, assetID)
  60. }
  61. func (f *FeedbackPlaneService) DeleteProjectAsset(assetID string) error {
  62. return f.PlaneService.DeleteProjectAsset(f.WorkspaceSlug, f.ProjectId, assetID)
  63. }
  64. func (f *FeedbackPlaneService) BindAssetsToEntity(entityID string, assetIDs []string) error {
  65. return f.PlaneService.BindAssetsToEntity(f.WorkspaceSlug, f.ProjectId, entityID, assetIDs)
  66. }
  67. // ============ Workspace 便捷方法(绑定 workspace)============
  68. func (f *FeedbackPlaneService) GetWorkspace() ([]byte, error) {
  69. return f.PlaneService.GetWorkspace(f.WorkspaceSlug)
  70. }
  71. // ============ Project 便捷方法(绑定 workspace)============
  72. func (f *FeedbackPlaneService) ListProjects() ([]byte, error) {
  73. return f.PlaneService.ListProjects(f.WorkspaceSlug)
  74. }
  75. func (f *FeedbackPlaneService) GetProject(projectID string) ([]byte, error) {
  76. return f.PlaneService.GetProject(f.WorkspaceSlug, projectID)
  77. }
  78. // ============ Issue 便捷方法(绑定 workspace/project)============
  79. func (f *FeedbackPlaneService) ListIssues() ([]byte, error) {
  80. return f.PlaneService.ListIssues(f.WorkspaceSlug, f.ProjectId)
  81. }
  82. func (f *FeedbackPlaneService) GetIssue(issueID string) ([]byte, error) {
  83. return f.PlaneService.GetIssue(f.WorkspaceSlug, f.ProjectId, issueID)
  84. }
  85. func (f *FeedbackPlaneService) GetSubIssues(issueID string) ([]byte, error) {
  86. return f.PlaneService.GetSubIssues(f.WorkspaceSlug, f.ProjectId, issueID)
  87. }
  88. func (f *FeedbackPlaneService) GetIssueActivity(issueID string) ([]byte, error) {
  89. return f.PlaneService.GetIssueActivity(f.WorkspaceSlug, f.ProjectId, issueID)
  90. }
  91. // ============ Cycle 便捷方法(绑定 workspace/project)============
  92. func (f *FeedbackPlaneService) ListCycles() ([]byte, error) {
  93. return f.PlaneService.ListCycles(f.WorkspaceSlug, f.ProjectId)
  94. }
  95. func (f *FeedbackPlaneService) GetCycle(cycleID string) ([]byte, error) {
  96. return f.PlaneService.GetCycle(f.WorkspaceSlug, f.ProjectId, cycleID)
  97. }
  98. func (f *FeedbackPlaneService) ListCycleIssues(cycleID string) ([]byte, error) {
  99. return f.PlaneService.ListCycleIssues(f.WorkspaceSlug, f.ProjectId, cycleID)
  100. }
  101. // ============ Module 便捷方法(绑定 workspace/project)============
  102. func (f *FeedbackPlaneService) ListModules() ([]byte, error) {
  103. return f.PlaneService.ListModules(f.WorkspaceSlug, f.ProjectId)
  104. }
  105. func (f *FeedbackPlaneService) GetModule(moduleID string) ([]byte, error) {
  106. return f.PlaneService.GetModule(f.WorkspaceSlug, f.ProjectId, moduleID)
  107. }
  108. func (f *FeedbackPlaneService) ListModuleIssues(moduleID string) ([]byte, error) {
  109. return f.PlaneService.ListModuleIssues(f.WorkspaceSlug, f.ProjectId, moduleID)
  110. }
  111. // ============ Label 便捷方法(绑定 workspace/project)============
  112. func (f *FeedbackPlaneService) ListLabels() ([]byte, error) {
  113. return f.PlaneService.ListLabels(f.WorkspaceSlug, f.ProjectId)
  114. }
  115. func (f *FeedbackPlaneService) GetLabel(labelID string) ([]byte, error) {
  116. return f.PlaneService.GetLabel(f.WorkspaceSlug, f.ProjectId, labelID)
  117. }
  118. // ============ State 便捷方法(绑定 workspace/project)============
  119. func (f *FeedbackPlaneService) ListStates() ([]byte, error) {
  120. return f.PlaneService.ListStates(f.WorkspaceSlug, f.ProjectId)
  121. }
  122. func (f *FeedbackPlaneService) GetState(stateID string) ([]byte, error) {
  123. return f.PlaneService.GetState(f.WorkspaceSlug, f.ProjectId, stateID)
  124. }
  125. // ============ Comment 便捷方法(绑定 workspace/project)============
  126. func (f *FeedbackPlaneService) ListComments(issueID string) ([]byte, error) {
  127. return f.PlaneService.ListComments(f.WorkspaceSlug, f.ProjectId, issueID)
  128. }
  129. func (f *FeedbackPlaneService) GetComment(issueID, commentID string) ([]byte, error) {
  130. return f.PlaneService.GetComment(f.WorkspaceSlug, f.ProjectId, issueID, commentID)
  131. }
  132. // ============ Link 便捷方法(绑定 workspace/project)============
  133. func (f *FeedbackPlaneService) ListIssueLinks(issueID string) ([]byte, error) {
  134. return f.PlaneService.ListIssueLinks(f.WorkspaceSlug, f.ProjectId, issueID)
  135. }
  136. // ============ Relation 便捷方法(绑定 workspace/project)============
  137. func (f *FeedbackPlaneService) ListIssueRelations(issueID string) ([]byte, error) {
  138. return f.PlaneService.ListIssueRelations(f.WorkspaceSlug, f.ProjectId, issueID)
  139. }
  140. // ============ Sticky 便捷方法(绑定 workspace)============
  141. func (f *FeedbackPlaneService) ListStickies() ([]byte, error) {
  142. return f.PlaneService.ListStickies(f.WorkspaceSlug)
  143. }
  144. func (f *FeedbackPlaneService) GetSticky(stickyID string) ([]byte, error) {
  145. return f.PlaneService.GetSticky(f.WorkspaceSlug, stickyID)
  146. }
  147. // ============ Page 便捷方法(绑定 workspace/project)============
  148. func (f *FeedbackPlaneService) ListPages() ([]byte, error) {
  149. return f.PlaneService.ListPages(f.WorkspaceSlug, f.ProjectId)
  150. }
  151. func (f *FeedbackPlaneService) GetPage(pageID string) ([]byte, error) {
  152. return f.PlaneService.GetPage(f.WorkspaceSlug, f.ProjectId, pageID)
  153. }
  154. func (f *FeedbackPlaneService) GetPageDescription(pageID string) ([]byte, error) {
  155. return f.PlaneService.GetPageDescription(f.WorkspaceSlug, f.ProjectId, pageID)
  156. }
  157. // ============ Member 便捷方法(绑定 workspace/project)============
  158. func (f *FeedbackPlaneService) ListWorkspaceMembers() ([]byte, error) {
  159. return f.PlaneService.ListWorkspaceMembers(f.WorkspaceSlug)
  160. }
  161. func (f *FeedbackPlaneService) GetWorkspaceMember(memberID string) ([]byte, error) {
  162. return f.PlaneService.GetWorkspaceMember(f.WorkspaceSlug, memberID)
  163. }
  164. func (f *FeedbackPlaneService) ListProjectMembers() ([]byte, error) {
  165. return f.PlaneService.ListProjectMembers(f.WorkspaceSlug, f.ProjectId)
  166. }
  167. func (f *FeedbackPlaneService) GetProjectMember(memberID string) ([]byte, error) {
  168. return f.PlaneService.GetProjectMember(f.WorkspaceSlug, f.ProjectId, memberID)
  169. }