meeglesdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/README.md +191 -0
  2. package/dist/client.d.ts +186 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +197 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/core/base-service.d.ts +156 -0
  7. package/dist/core/base-service.d.ts.map +1 -0
  8. package/dist/core/base-service.js +240 -0
  9. package/dist/core/base-service.js.map +1 -0
  10. package/dist/core/errors.d.ts +181 -0
  11. package/dist/core/errors.d.ts.map +1 -0
  12. package/dist/core/errors.js +250 -0
  13. package/dist/core/errors.js.map +1 -0
  14. package/dist/core/rate-limiter.d.ts +72 -0
  15. package/dist/core/rate-limiter.d.ts.map +1 -0
  16. package/dist/core/rate-limiter.js +269 -0
  17. package/dist/core/rate-limiter.js.map +1 -0
  18. package/dist/core/request.d.ts +270 -0
  19. package/dist/core/request.d.ts.map +1 -0
  20. package/dist/core/request.js +842 -0
  21. package/dist/core/request.js.map +1 -0
  22. package/dist/core/token-manager.d.ts +134 -0
  23. package/dist/core/token-manager.d.ts.map +1 -0
  24. package/dist/core/token-manager.js +412 -0
  25. package/dist/core/token-manager.js.map +1 -0
  26. package/dist/helpers/auth.d.ts +7 -0
  27. package/dist/helpers/auth.d.ts.map +1 -0
  28. package/dist/helpers/auth.js +19 -0
  29. package/dist/helpers/auth.js.map +1 -0
  30. package/dist/index.d.ts +72 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +61 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/service/auth/index.d.ts +96 -0
  35. package/dist/service/auth/index.d.ts.map +1 -0
  36. package/dist/service/auth/index.js +163 -0
  37. package/dist/service/auth/index.js.map +1 -0
  38. package/dist/service/config/basic.d.ts +37 -0
  39. package/dist/service/config/basic.d.ts.map +1 -0
  40. package/dist/service/config/basic.js +54 -0
  41. package/dist/service/config/basic.js.map +1 -0
  42. package/dist/service/config/config.d.ts +27 -0
  43. package/dist/service/config/config.d.ts.map +1 -0
  44. package/dist/service/config/config.js +34 -0
  45. package/dist/service/config/config.js.map +1 -0
  46. package/dist/service/config/field.d.ts +50 -0
  47. package/dist/service/config/field.d.ts.map +1 -0
  48. package/dist/service/config/field.js +74 -0
  49. package/dist/service/config/field.js.map +1 -0
  50. package/dist/service/config/relation.d.ts +53 -0
  51. package/dist/service/config/relation.d.ts.map +1 -0
  52. package/dist/service/config/relation.js +66 -0
  53. package/dist/service/config/relation.js.map +1 -0
  54. package/dist/service/config/resource.d.ts +59 -0
  55. package/dist/service/config/resource.d.ts.map +1 -0
  56. package/dist/service/config/resource.js +75 -0
  57. package/dist/service/config/resource.js.map +1 -0
  58. package/dist/service/config/role.d.ts +55 -0
  59. package/dist/service/config/role.d.ts.map +1 -0
  60. package/dist/service/config/role.js +90 -0
  61. package/dist/service/config/role.js.map +1 -0
  62. package/dist/service/config/template.d.ts +65 -0
  63. package/dist/service/config/template.d.ts.map +1 -0
  64. package/dist/service/config/template.js +95 -0
  65. package/dist/service/config/template.js.map +1 -0
  66. package/dist/service/measure/index.d.ts +26 -0
  67. package/dist/service/measure/index.d.ts.map +1 -0
  68. package/dist/service/measure/index.js +36 -0
  69. package/dist/service/measure/index.js.map +1 -0
  70. package/dist/service/measure/query.d.ts +56 -0
  71. package/dist/service/measure/query.d.ts.map +1 -0
  72. package/dist/service/measure/query.js +86 -0
  73. package/dist/service/measure/query.js.map +1 -0
  74. package/dist/service/space/relation.d.ts +63 -0
  75. package/dist/service/space/relation.d.ts.map +1 -0
  76. package/dist/service/space/relation.js +102 -0
  77. package/dist/service/space/relation.js.map +1 -0
  78. package/dist/service/space/space.d.ts +81 -0
  79. package/dist/service/space/space.d.ts.map +1 -0
  80. package/dist/service/space/space.js +110 -0
  81. package/dist/service/space/space.js.map +1 -0
  82. package/dist/service/tenant/tenant.d.ts +52 -0
  83. package/dist/service/tenant/tenant.d.ts.map +1 -0
  84. package/dist/service/tenant/tenant.js +75 -0
  85. package/dist/service/tenant/tenant.js.map +1 -0
  86. package/dist/service/user/group.d.ts +47 -0
  87. package/dist/service/user/group.d.ts.map +1 -0
  88. package/dist/service/user/group.js +70 -0
  89. package/dist/service/user/group.js.map +1 -0
  90. package/dist/service/user/query.d.ts +25 -0
  91. package/dist/service/user/query.d.ts.map +1 -0
  92. package/dist/service/user/query.js +26 -0
  93. package/dist/service/user/query.js.map +1 -0
  94. package/dist/service/user/search.d.ts +25 -0
  95. package/dist/service/user/search.d.ts.map +1 -0
  96. package/dist/service/user/search.js +26 -0
  97. package/dist/service/user/search.js.map +1 -0
  98. package/dist/service/user/user.d.ts +37 -0
  99. package/dist/service/user/user.d.ts.map +1 -0
  100. package/dist/service/user/user.js +46 -0
  101. package/dist/service/user/user.js.map +1 -0
  102. package/dist/service/view/query.d.ts +52 -0
  103. package/dist/service/view/query.d.ts.map +1 -0
  104. package/dist/service/view/query.js +76 -0
  105. package/dist/service/view/query.js.map +1 -0
  106. package/dist/service/view/view.d.ts +76 -0
  107. package/dist/service/view/view.d.ts.map +1 -0
  108. package/dist/service/view/view.js +108 -0
  109. package/dist/service/view/view.js.map +1 -0
  110. package/dist/service/workitem/attachment.d.ts +143 -0
  111. package/dist/service/workitem/attachment.d.ts.map +1 -0
  112. package/dist/service/workitem/attachment.js +231 -0
  113. package/dist/service/workitem/attachment.js.map +1 -0
  114. package/dist/service/workitem/batch.d.ts +135 -0
  115. package/dist/service/workitem/batch.d.ts.map +1 -0
  116. package/dist/service/workitem/batch.js +146 -0
  117. package/dist/service/workitem/batch.js.map +1 -0
  118. package/dist/service/workitem/chat.d.ts +42 -0
  119. package/dist/service/workitem/chat.d.ts.map +1 -0
  120. package/dist/service/workitem/chat.js +50 -0
  121. package/dist/service/workitem/chat.js.map +1 -0
  122. package/dist/service/workitem/comment.d.ts +139 -0
  123. package/dist/service/workitem/comment.d.ts.map +1 -0
  124. package/dist/service/workitem/comment.js +180 -0
  125. package/dist/service/workitem/comment.js.map +1 -0
  126. package/dist/service/workitem/review.d.ts +44 -0
  127. package/dist/service/workitem/review.d.ts.map +1 -0
  128. package/dist/service/workitem/review.js +49 -0
  129. package/dist/service/workitem/review.js.map +1 -0
  130. package/dist/service/workitem/search.d.ts +213 -0
  131. package/dist/service/workitem/search.d.ts.map +1 -0
  132. package/dist/service/workitem/search.js +242 -0
  133. package/dist/service/workitem/search.js.map +1 -0
  134. package/dist/service/workitem/subtask.d.ts +193 -0
  135. package/dist/service/workitem/subtask.d.ts.map +1 -0
  136. package/dist/service/workitem/subtask.js +247 -0
  137. package/dist/service/workitem/subtask.js.map +1 -0
  138. package/dist/service/workitem/workItem.d.ts +225 -0
  139. package/dist/service/workitem/workItem.d.ts.map +1 -0
  140. package/dist/service/workitem/workItem.js +310 -0
  141. package/dist/service/workitem/workItem.js.map +1 -0
  142. package/dist/service/workitem/workflow.d.ts +214 -0
  143. package/dist/service/workitem/workflow.d.ts.map +1 -0
  144. package/dist/service/workitem/workflow.js +281 -0
  145. package/dist/service/workitem/workflow.js.map +1 -0
  146. package/dist/service/workitem/workhour.d.ts +63 -0
  147. package/dist/service/workitem/workhour.d.ts.map +1 -0
  148. package/dist/service/workitem/workhour.js +93 -0
  149. package/dist/service/workitem/workhour.js.map +1 -0
  150. package/dist/types/auth.d.ts +115 -0
  151. package/dist/types/auth.d.ts.map +1 -0
  152. package/dist/types/auth.js +6 -0
  153. package/dist/types/auth.js.map +1 -0
  154. package/dist/types/common.d.ts +354 -0
  155. package/dist/types/common.d.ts.map +1 -0
  156. package/dist/types/common.js +14 -0
  157. package/dist/types/common.js.map +1 -0
  158. package/dist/types/config.d.ts +305 -0
  159. package/dist/types/config.d.ts.map +1 -0
  160. package/dist/types/config.js +6 -0
  161. package/dist/types/config.js.map +1 -0
  162. package/dist/types/index.d.ts +13 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +13 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/types/measure.d.ts +55 -0
  167. package/dist/types/measure.d.ts.map +1 -0
  168. package/dist/types/measure.js +6 -0
  169. package/dist/types/measure.js.map +1 -0
  170. package/dist/types/space.d.ts +164 -0
  171. package/dist/types/space.d.ts.map +1 -0
  172. package/dist/types/space.js +6 -0
  173. package/dist/types/space.js.map +1 -0
  174. package/dist/types/tenant.d.ts +106 -0
  175. package/dist/types/tenant.d.ts.map +1 -0
  176. package/dist/types/tenant.js +6 -0
  177. package/dist/types/tenant.js.map +1 -0
  178. package/dist/types/user.d.ts +110 -0
  179. package/dist/types/user.d.ts.map +1 -0
  180. package/dist/types/user.js +6 -0
  181. package/dist/types/user.js.map +1 -0
  182. package/dist/types/view.d.ts +162 -0
  183. package/dist/types/view.d.ts.map +1 -0
  184. package/dist/types/view.js +6 -0
  185. package/dist/types/view.js.map +1 -0
  186. package/dist/types/workitem.d.ts +1523 -0
  187. package/dist/types/workitem.d.ts.map +1 -0
  188. package/dist/types/workitem.js +6 -0
  189. package/dist/types/workitem.js.map +1 -0
  190. package/package.json +43 -0
@@ -0,0 +1,242 @@
1
+ /**
2
+ * 搜索服务
3
+ * 100% 参考 Meego API 文档
4
+ *
5
+ * 提供工作项的多种搜索方式:
6
+ * - 筛选(单空间/跨空间)
7
+ * - 复杂条件搜索
8
+ * - 关联工作项搜索
9
+ * - 全局搜索
10
+ */
11
+ import { BaseService } from '../../core/base-service.js';
12
+ /** API 路径 */
13
+ export const API_PATHS = {
14
+ /** 筛选工作项(单空间) */
15
+ FILTER: '/open_api/:project_key/work_item/filter',
16
+ /** 筛选工作项(跨空间) */
17
+ FILTER_ACROSS_PROJECT: '/open_api/work_items/filter_across_project',
18
+ /** 复杂条件搜索(单空间) */
19
+ SEARCH_BY_PARAMS: '/open_api/:project_key/work_item/:work_item_type_key/search/params',
20
+ /** 关联工作项搜索(单空间) */
21
+ SEARCH_BY_RELATION: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/search_by_relation',
22
+ /** 全局搜索 */
23
+ COMPOSITIVE_SEARCH: '/open_api/compositive_search',
24
+ };
25
+ /**
26
+ * 搜索服务
27
+ *
28
+ * 提供工作项的多种搜索能力
29
+ */
30
+ export class SearchService extends BaseService {
31
+ /**
32
+ * 筛选工作项(单空间)
33
+ *
34
+ * 在指定空间内,根据工作项名称、用户、ID、时间、状态等条件筛选工作项
35
+ *
36
+ * @param projectKey 空间 ID 或域名
37
+ * @param request 筛选请求
38
+ * @param options 请求选项
39
+ * @returns 分页的工作项列表(最多 5000 条)
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // 按工作项类型和名称筛选
44
+ * const result = await client.workItem.search.filter('my-project', {
45
+ * work_item_type_keys: ['story'],
46
+ * work_item_name: '需求',
47
+ * page_size: 20,
48
+ * });
49
+ *
50
+ * // 按工作项 ID 列表精确查询
51
+ * const result = await client.workItem.search.filter('my-project', {
52
+ * work_item_type_keys: ['story', 'bug'],
53
+ * work_item_ids: [123, 456, 789],
54
+ * });
55
+ *
56
+ * // 按时间范围筛选
57
+ * const result = await client.workItem.search.filter('my-project', {
58
+ * work_item_type_keys: ['story'],
59
+ * created_at: {
60
+ * start: Date.now() - 7 * 24 * 60 * 60 * 1000, // 7天前
61
+ * end: Date.now(),
62
+ * },
63
+ * });
64
+ * ```
65
+ */
66
+ async filter(projectKey, request, options) {
67
+ return this.postPaginated(API_PATHS.FILTER, request, {
68
+ ...options,
69
+ pathParams: {
70
+ project_key: projectKey,
71
+ ...options?.pathParams,
72
+ },
73
+ });
74
+ }
75
+ /**
76
+ * 筛选工作项(跨空间)
77
+ *
78
+ * 跨多个空间搜索符合条件的工作项
79
+ *
80
+ * @param request 筛选请求
81
+ * @param options 请求选项
82
+ * @returns 分页的工作项列表(最多 5000 条)
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * // 跨空间筛选需求
87
+ * const result = await client.workItem.search.filterAcrossProject({
88
+ * work_item_type_key: 'story',
89
+ * project_keys: ['project1', 'project2'],
90
+ * work_item_name: '需求',
91
+ * });
92
+ *
93
+ * // 按用户筛选
94
+ * const result = await client.workItem.search.filterAcrossProject({
95
+ * work_item_type_key: 'story',
96
+ * search_user: {
97
+ * user_keys: ['user123'],
98
+ * field_key: 'created_by',
99
+ * },
100
+ * });
101
+ * ```
102
+ */
103
+ async filterAcrossProject(request, options) {
104
+ return this.postPaginated(API_PATHS.FILTER_ACROSS_PROJECT, request, options);
105
+ }
106
+ /**
107
+ * 复杂条件搜索(单空间)
108
+ *
109
+ * 使用复杂的搜索条件组合搜索工作项,支持多种操作符和嵌套条件
110
+ *
111
+ * @param projectKey 空间 ID 或域名
112
+ * @param workItemTypeKey 工作项类型
113
+ * @param request 搜索请求
114
+ * @param options 请求选项
115
+ * @returns 分页的工作项列表(最多 5000 条)
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * // 搜索指定 ID 的工作项
120
+ * const result = await client.workItem.search.searchByParams('my-project', 'story', {
121
+ * search_group: {
122
+ * conjunction: 'AND',
123
+ * search_params: [
124
+ * {
125
+ * param_key: 'work_item_id',
126
+ * value: [123456],
127
+ * operator: 'HAS ANY OF',
128
+ * },
129
+ * ],
130
+ * },
131
+ * });
132
+ *
133
+ * // 组合条件搜索
134
+ * const result = await client.workItem.search.searchByParams('my-project', 'story', {
135
+ * search_group: {
136
+ * conjunction: 'AND',
137
+ * search_params: [
138
+ * { param_key: 'priority', value: ['P0', 'P1'], operator: 'HAS ANY OF' },
139
+ * { param_key: 'created_at', value: 1700000000000, operator: '>=' },
140
+ * ],
141
+ * },
142
+ * expand: { need_workflow: true },
143
+ * });
144
+ * ```
145
+ */
146
+ async searchByParams(projectKey, workItemTypeKey, request, options) {
147
+ return this.postPaginated(API_PATHS.SEARCH_BY_PARAMS, request, {
148
+ ...options,
149
+ pathParams: {
150
+ project_key: projectKey,
151
+ work_item_type_key: workItemTypeKey,
152
+ ...options?.pathParams,
153
+ },
154
+ });
155
+ }
156
+ /**
157
+ * 搜索关联工作项
158
+ *
159
+ * 获取与指定工作项存在关联关系的工作项列表
160
+ *
161
+ * @param projectKey 空间 ID 或域名
162
+ * @param workItemTypeKey 工作项类型
163
+ * @param workItemId 工作项 ID
164
+ * @param request 搜索请求
165
+ * @param options 请求选项
166
+ * @returns 分页的关联工作项列表(最多 2000 条)
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * // 获取需求关联的缺陷列表
171
+ * const result = await client.workItem.search.searchByRelation(
172
+ * 'my-project',
173
+ * 'story',
174
+ * 123456,
175
+ * {
176
+ * relation_work_item_type_key: 'issue',
177
+ * relation_key: '_field_linked_story',
178
+ * }
179
+ * );
180
+ *
181
+ * // 使用对接标识查询
182
+ * const result = await client.workItem.search.searchByRelation(
183
+ * 'my-project',
184
+ * 'story',
185
+ * 123456,
186
+ * {
187
+ * relation_work_item_type_key: 'bug',
188
+ * relation_key: 'my_relation_alias',
189
+ * relation_type: 1, // 使用对接标识
190
+ * }
191
+ * );
192
+ * ```
193
+ */
194
+ async searchByRelation(projectKey, workItemTypeKey, workItemId, request, options) {
195
+ return this.postPaginated(API_PATHS.SEARCH_BY_RELATION, request, {
196
+ ...options,
197
+ pathParams: {
198
+ project_key: projectKey,
199
+ work_item_type_key: workItemTypeKey,
200
+ work_item_id: String(workItemId),
201
+ ...options?.pathParams,
202
+ },
203
+ });
204
+ }
205
+ /**
206
+ * 全局搜索
207
+ *
208
+ * 按照标题、描述、人员等多字段跨空间搜索工作项或视图
209
+ *
210
+ * @param request 搜索请求
211
+ * @param options 请求选项
212
+ * @returns 分页的搜索结果(最多 200 条)
213
+ *
214
+ * @example
215
+ * ```typescript
216
+ * // 搜索工作项
217
+ * const result = await client.workItem.search.compositiveSearch({
218
+ * query_type: 'workitem',
219
+ * query: '测试需求',
220
+ * query_sub_type: ['story'],
221
+ * page_size: 20,
222
+ * });
223
+ *
224
+ * // 搜索视图
225
+ * const result = await client.workItem.search.compositiveSearch({
226
+ * query_type: 'view',
227
+ * query: '我的视图',
228
+ * });
229
+ *
230
+ * // 限定空间范围搜索
231
+ * const result = await client.workItem.search.compositiveSearch({
232
+ * query_type: 'workitem',
233
+ * query: '紧急',
234
+ * project_keys: ['project1', 'project2'],
235
+ * });
236
+ * ```
237
+ */
238
+ async compositiveSearch(request, options) {
239
+ return this.postPaginated(API_PATHS.COMPOSITIVE_SEARCH, request, options);
240
+ }
241
+ }
242
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/service/workitem/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAA8B,MAAM,4BAA4B,CAAC;AAYrF,aAAa;AACb,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,iBAAiB;IACjB,MAAM,EAAE,yCAAyC;IACjD,iBAAiB;IACjB,qBAAqB,EAAE,4CAA4C;IACnE,kBAAkB;IAClB,gBAAgB,EAAE,oEAAoE;IACtF,mBAAmB;IACnB,kBAAkB,EAChB,uFAAuF;IACzF,WAAW;IACX,kBAAkB,EAAE,8BAA8B;CACnD,CAAC;AAEF;;;;GAIG;AACH,MAAM,OAAO,aAAc,SAAQ,WAAW;IAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,KAAK,CAAC,MAAM,CACV,UAAkB,EAClB,OAA+B,EAC/B,OAAyC;QAEzC,OAAO,IAAI,CAAC,aAAa,CAAW,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE;YAC7D,GAAG,OAAO;YACV,UAAU,EAAE;gBACV,WAAW,EAAE,UAAU;gBACvB,GAAG,OAAO,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAA4C,EAC5C,OAAyC;QAEzC,OAAO,IAAI,CAAC,aAAa,CAAW,SAAS,CAAC,qBAAqB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACzF,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;IACH,KAAK,CAAC,cAAc,CAClB,UAAkB,EAClB,eAAuB,EACvB,OAAuC,EACvC,OAAyC;QAEzC,OAAO,IAAI,CAAC,aAAa,CAAW,SAAS,CAAC,gBAAgB,EAAE,OAAO,EAAE;YACvE,GAAG,OAAO;YACV,UAAU,EAAE;gBACV,WAAW,EAAE,UAAU;gBACvB,kBAAkB,EAAE,eAAe;gBACnC,GAAG,OAAO,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,KAAK,CAAC,gBAAgB,CACpB,UAAkB,EAClB,eAAuB,EACvB,UAAkB,EAClB,OAAgC,EAChC,OAAyC;QAEzC,OAAO,IAAI,CAAC,aAAa,CAAW,SAAS,CAAC,kBAAkB,EAAE,OAAO,EAAE;YACzE,GAAG,OAAO;YACV,UAAU,EAAE;gBACV,WAAW,EAAE,UAAU;gBACvB,kBAAkB,EAAE,eAAe;gBACnC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC;gBAChC,GAAG,OAAO,EAAE,UAAU;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,KAAK,CAAC,iBAAiB,CACrB,OAAiC,EACjC,OAAsD;QAEtD,OAAO,IAAI,CAAC,aAAa,CACvB,SAAS,CAAC,kBAAkB,EAC5B,OAAO,EACP,OAAO,CACR,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * 子任务服务
3
+ * 100% 参考 Meego API 文档
4
+ *
5
+ * 提供节点子任务的创建、更新、删除、查询、完成/回滚功能
6
+ */
7
+ import { BaseService, type ServiceRequestOptions } from '../../core/base-service.js';
8
+ import type { PaginatedResult } from '../../types/common.js';
9
+ import type { CreateSubtaskRequest, UpdateSubtaskRequest, CompleteRollbackSubtaskRequest, GetSubtasksQuery, SearchSubtasksRequest, NodeTask, SubtaskSearchResult } from '../../types/workitem.js';
10
+ /** API 路径 */
11
+ export declare const API_PATHS: {
12
+ /** 创建子任务 */
13
+ CREATE: string;
14
+ /** 更新子任务 */
15
+ UPDATE: string;
16
+ /** 删除子任务 */
17
+ DELETE: string;
18
+ /** 获取子任务详情 */
19
+ GET: string;
20
+ /** 子任务完成/回滚 */
21
+ COMPLETE_ROLLBACK: string;
22
+ /** 获取指定的子任务列表(跨空间) */
23
+ SEARCH_ACROSS_PROJECT: string;
24
+ };
25
+ /**
26
+ * 子任务服务
27
+ *
28
+ * 提供节点子任务的创建、更新、删除、查询、完成/回滚功能
29
+ */
30
+ export declare class SubtaskService extends BaseService {
31
+ /**
32
+ * 创建子任务
33
+ *
34
+ * 在工作项实例的指定节点上创建一个子任务
35
+ *
36
+ * @param projectKey 空间 ID 或域名
37
+ * @param workItemTypeKey 工作项类型
38
+ * @param workItemId 工作项 ID
39
+ * @param request 创建请求
40
+ * @param options 请求选项
41
+ * @returns 创建成功的子任务 ID
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * // 创建简单子任务
46
+ * const taskId = await client.workItem.subtask.create('my-project', 'story', 123456, {
47
+ * node_id: 'doing',
48
+ * name: '需求分析',
49
+ * });
50
+ *
51
+ * // 创建带排期的子任务
52
+ * const taskId = await client.workItem.subtask.create('my-project', 'story', 123456, {
53
+ * node_id: 'doing',
54
+ * name: '需求分析',
55
+ * schedule: {
56
+ * points: 1,
57
+ * estimate_start_date: 1724169600000,
58
+ * estimate_end_date: 1724428799999,
59
+ * },
60
+ * assignee: ['706477916559299xxxx'],
61
+ * });
62
+ * ```
63
+ */
64
+ create(projectKey: string, workItemTypeKey: string, workItemId: number, request: CreateSubtaskRequest, options?: ServiceRequestOptions<number>): Promise<number>;
65
+ /**
66
+ * 更新子任务
67
+ *
68
+ * 更新工作项实例指定节点上的子任务详细信息
69
+ *
70
+ * @param projectKey 空间 ID 或域名
71
+ * @param workItemTypeKey 工作项类型
72
+ * @param workItemId 工作项 ID
73
+ * @param nodeId 目标节点 ID
74
+ * @param taskId 子任务 ID
75
+ * @param request 更新请求
76
+ * @param options 请求选项
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * await client.workItem.subtask.update('my-project', 'story', 123456, 'doing', 789, {
81
+ * name: '更新后的名称',
82
+ * note: '备注信息',
83
+ * schedule: {
84
+ * points: 3,
85
+ * estimate_start_date: 1724169600000,
86
+ * estimate_end_date: 1724428799999,
87
+ * },
88
+ * });
89
+ * ```
90
+ */
91
+ update(projectKey: string, workItemTypeKey: string, workItemId: number, nodeId: string, taskId: number, request: UpdateSubtaskRequest, options?: ServiceRequestOptions<void>): Promise<void>;
92
+ /**
93
+ * 删除子任务
94
+ *
95
+ * 删除指定工作项实例中的一个子任务
96
+ *
97
+ * @param projectKey 空间 ID 或域名
98
+ * @param workItemTypeKey 工作项类型
99
+ * @param workItemId 工作项 ID
100
+ * @param taskId 子任务 ID
101
+ * @param options 请求选项
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * await client.workItem.subtask.remove('my-project', 'story', 123456, 789);
106
+ * ```
107
+ */
108
+ remove(projectKey: string, workItemTypeKey: string, workItemId: number, taskId: number, options?: ServiceRequestOptions<void>): Promise<void>;
109
+ /**
110
+ * 获取子任务列表
111
+ *
112
+ * 获取指定工作项实例上的子任务详细信息
113
+ *
114
+ * @param projectKey 空间 ID 或域名
115
+ * @param workItemTypeKey 工作项类型
116
+ * @param workItemId 工作项 ID
117
+ * @param query 查询参数
118
+ * @param options 请求选项
119
+ * @returns 节点子任务信息数组
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * // 获取所有节点的子任务
124
+ * const nodeTasks = await client.workItem.subtask.list('my-project', 'story', 123456);
125
+ *
126
+ * // 获取指定节点的子任务
127
+ * const nodeTasks = await client.workItem.subtask.list('my-project', 'story', 123456, {
128
+ * node_id: 'doing',
129
+ * });
130
+ * ```
131
+ */
132
+ list(projectKey: string, workItemTypeKey: string, workItemId: number, query?: GetSubtasksQuery, options?: ServiceRequestOptions<NodeTask[]>): Promise<NodeTask[]>;
133
+ /**
134
+ * 完成或回滚子任务
135
+ *
136
+ * 完成或者回滚工作项实例指定节点上的一个子任务
137
+ *
138
+ * @param projectKey 空间 ID 或域名
139
+ * @param workItemTypeKey 工作项类型
140
+ * @param workItemId 工作项 ID
141
+ * @param request 操作请求
142
+ * @param options 请求选项
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * // 完成子任务
147
+ * await client.workItem.subtask.completeOrRollback('my-project', 'story', 123456, {
148
+ * node_id: 'doing',
149
+ * task_id: 789,
150
+ * action: 'confirm',
151
+ * });
152
+ *
153
+ * // 回滚子任务并更新信息
154
+ * await client.workItem.subtask.completeOrRollback('my-project', 'story', 123456, {
155
+ * node_id: 'doing',
156
+ * task_id: 789,
157
+ * action: 'rollback',
158
+ * note: '需要重新处理',
159
+ * });
160
+ * ```
161
+ */
162
+ completeOrRollback(projectKey: string, workItemTypeKey: string, workItemId: number, request: CompleteRollbackSubtaskRequest, options?: ServiceRequestOptions<void>): Promise<void>;
163
+ /**
164
+ * 搜索子任务(跨空间)
165
+ *
166
+ * 跨空间搜索符合传入条件的子任务,最多返回 5000 条数据
167
+ *
168
+ * @param request 搜索请求
169
+ * @param options 请求选项
170
+ * @returns 搜索结果(包含分页信息和子任务列表)
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * // 搜索指定空间下的所有子任务
175
+ * const result = await client.workItem.subtask.search({
176
+ * project_keys: ['my-project'],
177
+ * });
178
+ * console.log(result.pagination.total); // 总数
179
+ * console.log(result.data); // 子任务列表
180
+ *
181
+ * // 搜索指定负责人的进行中子任务
182
+ * const result = await client.workItem.subtask.search({
183
+ * project_keys: ['my-project'],
184
+ * user_keys: ['user123'],
185
+ * status: 0, // 进行中
186
+ * page_size: 20,
187
+ * page_num: 1,
188
+ * });
189
+ * ```
190
+ */
191
+ search(request: SearchSubtasksRequest, options?: ServiceRequestOptions<SubtaskSearchResult>): Promise<PaginatedResult<SubtaskSearchResult>>;
192
+ }
193
+ //# sourceMappingURL=subtask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subtask.d.ts","sourceRoot":"","sources":["../../../src/service/workitem/subtask.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAC9B,gBAAgB,EAChB,qBAAqB,EACrB,QAAQ,EACR,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAEjC,aAAa;AACb,eAAO,MAAM,SAAS;IACpB,YAAY;;IAEZ,YAAY;;IAEZ,YAAY;;IAEZ,cAAc;;IAEd,eAAe;;IAEf,sBAAsB;;CAEvB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,qBAAqB,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC;IAgBlB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAkBhB;;;;;;;;;;;;;;;OAeG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAgBhB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,IAAI,CACR,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,qBAAqB,CAAC,QAAQ,EAAE,CAAC,GAC1C,OAAO,CAAC,QAAQ,EAAE,CAAC;IAgBtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,8BAA8B,EACvC,OAAO,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAgBhB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACG,MAAM,CACV,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,GACnD,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;CAOjD"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * 子任务服务
3
+ * 100% 参考 Meego API 文档
4
+ *
5
+ * 提供节点子任务的创建、更新、删除、查询、完成/回滚功能
6
+ */
7
+ import { BaseService } from '../../core/base-service.js';
8
+ /** API 路径 */
9
+ export const API_PATHS = {
10
+ /** 创建子任务 */
11
+ CREATE: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/workflow/task',
12
+ /** 更新子任务 */
13
+ UPDATE: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/workflow/:node_id/task/:task_id',
14
+ /** 删除子任务 */
15
+ DELETE: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/task/:task_id',
16
+ /** 获取子任务详情 */
17
+ GET: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/workflow/task',
18
+ /** 子任务完成/回滚 */
19
+ COMPLETE_ROLLBACK: '/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/subtask/modify',
20
+ /** 获取指定的子任务列表(跨空间) */
21
+ SEARCH_ACROSS_PROJECT: '/open_api/work_item/subtask/search',
22
+ };
23
+ /**
24
+ * 子任务服务
25
+ *
26
+ * 提供节点子任务的创建、更新、删除、查询、完成/回滚功能
27
+ */
28
+ export class SubtaskService extends BaseService {
29
+ /**
30
+ * 创建子任务
31
+ *
32
+ * 在工作项实例的指定节点上创建一个子任务
33
+ *
34
+ * @param projectKey 空间 ID 或域名
35
+ * @param workItemTypeKey 工作项类型
36
+ * @param workItemId 工作项 ID
37
+ * @param request 创建请求
38
+ * @param options 请求选项
39
+ * @returns 创建成功的子任务 ID
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // 创建简单子任务
44
+ * const taskId = await client.workItem.subtask.create('my-project', 'story', 123456, {
45
+ * node_id: 'doing',
46
+ * name: '需求分析',
47
+ * });
48
+ *
49
+ * // 创建带排期的子任务
50
+ * const taskId = await client.workItem.subtask.create('my-project', 'story', 123456, {
51
+ * node_id: 'doing',
52
+ * name: '需求分析',
53
+ * schedule: {
54
+ * points: 1,
55
+ * estimate_start_date: 1724169600000,
56
+ * estimate_end_date: 1724428799999,
57
+ * },
58
+ * assignee: ['706477916559299xxxx'],
59
+ * });
60
+ * ```
61
+ */
62
+ async create(projectKey, workItemTypeKey, workItemId, request, options) {
63
+ return this.post(API_PATHS.CREATE, request, {
64
+ ...options,
65
+ pathParams: {
66
+ project_key: projectKey,
67
+ work_item_type_key: workItemTypeKey,
68
+ work_item_id: String(workItemId),
69
+ ...options?.pathParams,
70
+ },
71
+ });
72
+ }
73
+ /**
74
+ * 更新子任务
75
+ *
76
+ * 更新工作项实例指定节点上的子任务详细信息
77
+ *
78
+ * @param projectKey 空间 ID 或域名
79
+ * @param workItemTypeKey 工作项类型
80
+ * @param workItemId 工作项 ID
81
+ * @param nodeId 目标节点 ID
82
+ * @param taskId 子任务 ID
83
+ * @param request 更新请求
84
+ * @param options 请求选项
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * await client.workItem.subtask.update('my-project', 'story', 123456, 'doing', 789, {
89
+ * name: '更新后的名称',
90
+ * note: '备注信息',
91
+ * schedule: {
92
+ * points: 3,
93
+ * estimate_start_date: 1724169600000,
94
+ * estimate_end_date: 1724428799999,
95
+ * },
96
+ * });
97
+ * ```
98
+ */
99
+ async update(projectKey, workItemTypeKey, workItemId, nodeId, taskId, request, options) {
100
+ await this.post(API_PATHS.UPDATE, request, {
101
+ ...options,
102
+ pathParams: {
103
+ project_key: projectKey,
104
+ work_item_type_key: workItemTypeKey,
105
+ work_item_id: String(workItemId),
106
+ node_id: nodeId,
107
+ task_id: String(taskId),
108
+ ...options?.pathParams,
109
+ },
110
+ });
111
+ }
112
+ /**
113
+ * 删除子任务
114
+ *
115
+ * 删除指定工作项实例中的一个子任务
116
+ *
117
+ * @param projectKey 空间 ID 或域名
118
+ * @param workItemTypeKey 工作项类型
119
+ * @param workItemId 工作项 ID
120
+ * @param taskId 子任务 ID
121
+ * @param options 请求选项
122
+ *
123
+ * @example
124
+ * ```typescript
125
+ * await client.workItem.subtask.remove('my-project', 'story', 123456, 789);
126
+ * ```
127
+ */
128
+ async remove(projectKey, workItemTypeKey, workItemId, taskId, options) {
129
+ await this.delete(API_PATHS.DELETE, {
130
+ ...options,
131
+ pathParams: {
132
+ project_key: projectKey,
133
+ work_item_type_key: workItemTypeKey,
134
+ work_item_id: String(workItemId),
135
+ task_id: String(taskId),
136
+ ...options?.pathParams,
137
+ },
138
+ });
139
+ }
140
+ /**
141
+ * 获取子任务列表
142
+ *
143
+ * 获取指定工作项实例上的子任务详细信息
144
+ *
145
+ * @param projectKey 空间 ID 或域名
146
+ * @param workItemTypeKey 工作项类型
147
+ * @param workItemId 工作项 ID
148
+ * @param query 查询参数
149
+ * @param options 请求选项
150
+ * @returns 节点子任务信息数组
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * // 获取所有节点的子任务
155
+ * const nodeTasks = await client.workItem.subtask.list('my-project', 'story', 123456);
156
+ *
157
+ * // 获取指定节点的子任务
158
+ * const nodeTasks = await client.workItem.subtask.list('my-project', 'story', 123456, {
159
+ * node_id: 'doing',
160
+ * });
161
+ * ```
162
+ */
163
+ async list(projectKey, workItemTypeKey, workItemId, query, options) {
164
+ return this.get(API_PATHS.GET, {
165
+ ...options,
166
+ pathParams: {
167
+ project_key: projectKey,
168
+ work_item_type_key: workItemTypeKey,
169
+ work_item_id: String(workItemId),
170
+ ...options?.pathParams,
171
+ },
172
+ query: query?.node_id ? { node_id: query.node_id } : undefined,
173
+ });
174
+ }
175
+ /**
176
+ * 完成或回滚子任务
177
+ *
178
+ * 完成或者回滚工作项实例指定节点上的一个子任务
179
+ *
180
+ * @param projectKey 空间 ID 或域名
181
+ * @param workItemTypeKey 工作项类型
182
+ * @param workItemId 工作项 ID
183
+ * @param request 操作请求
184
+ * @param options 请求选项
185
+ *
186
+ * @example
187
+ * ```typescript
188
+ * // 完成子任务
189
+ * await client.workItem.subtask.completeOrRollback('my-project', 'story', 123456, {
190
+ * node_id: 'doing',
191
+ * task_id: 789,
192
+ * action: 'confirm',
193
+ * });
194
+ *
195
+ * // 回滚子任务并更新信息
196
+ * await client.workItem.subtask.completeOrRollback('my-project', 'story', 123456, {
197
+ * node_id: 'doing',
198
+ * task_id: 789,
199
+ * action: 'rollback',
200
+ * note: '需要重新处理',
201
+ * });
202
+ * ```
203
+ */
204
+ async completeOrRollback(projectKey, workItemTypeKey, workItemId, request, options) {
205
+ await this.post(API_PATHS.COMPLETE_ROLLBACK, request, {
206
+ ...options,
207
+ pathParams: {
208
+ project_key: projectKey,
209
+ work_item_type_key: workItemTypeKey,
210
+ work_item_id: String(workItemId),
211
+ ...options?.pathParams,
212
+ },
213
+ });
214
+ }
215
+ /**
216
+ * 搜索子任务(跨空间)
217
+ *
218
+ * 跨空间搜索符合传入条件的子任务,最多返回 5000 条数据
219
+ *
220
+ * @param request 搜索请求
221
+ * @param options 请求选项
222
+ * @returns 搜索结果(包含分页信息和子任务列表)
223
+ *
224
+ * @example
225
+ * ```typescript
226
+ * // 搜索指定空间下的所有子任务
227
+ * const result = await client.workItem.subtask.search({
228
+ * project_keys: ['my-project'],
229
+ * });
230
+ * console.log(result.pagination.total); // 总数
231
+ * console.log(result.data); // 子任务列表
232
+ *
233
+ * // 搜索指定负责人的进行中子任务
234
+ * const result = await client.workItem.subtask.search({
235
+ * project_keys: ['my-project'],
236
+ * user_keys: ['user123'],
237
+ * status: 0, // 进行中
238
+ * page_size: 20,
239
+ * page_num: 1,
240
+ * });
241
+ * ```
242
+ */
243
+ async search(request, options) {
244
+ return this.postPaginated(API_PATHS.SEARCH_ACROSS_PROJECT, request, options);
245
+ }
246
+ }
247
+ //# sourceMappingURL=subtask.js.map