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.
- package/README.md +191 -0
- package/dist/client.d.ts +186 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +197 -0
- package/dist/client.js.map +1 -0
- package/dist/core/base-service.d.ts +156 -0
- package/dist/core/base-service.d.ts.map +1 -0
- package/dist/core/base-service.js +240 -0
- package/dist/core/base-service.js.map +1 -0
- package/dist/core/errors.d.ts +181 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +250 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +72 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +269 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/request.d.ts +270 -0
- package/dist/core/request.d.ts.map +1 -0
- package/dist/core/request.js +842 -0
- package/dist/core/request.js.map +1 -0
- package/dist/core/token-manager.d.ts +134 -0
- package/dist/core/token-manager.d.ts.map +1 -0
- package/dist/core/token-manager.js +412 -0
- package/dist/core/token-manager.js.map +1 -0
- package/dist/helpers/auth.d.ts +7 -0
- package/dist/helpers/auth.d.ts.map +1 -0
- package/dist/helpers/auth.js +19 -0
- package/dist/helpers/auth.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/service/auth/index.d.ts +96 -0
- package/dist/service/auth/index.d.ts.map +1 -0
- package/dist/service/auth/index.js +163 -0
- package/dist/service/auth/index.js.map +1 -0
- package/dist/service/config/basic.d.ts +37 -0
- package/dist/service/config/basic.d.ts.map +1 -0
- package/dist/service/config/basic.js +54 -0
- package/dist/service/config/basic.js.map +1 -0
- package/dist/service/config/config.d.ts +27 -0
- package/dist/service/config/config.d.ts.map +1 -0
- package/dist/service/config/config.js +34 -0
- package/dist/service/config/config.js.map +1 -0
- package/dist/service/config/field.d.ts +50 -0
- package/dist/service/config/field.d.ts.map +1 -0
- package/dist/service/config/field.js +74 -0
- package/dist/service/config/field.js.map +1 -0
- package/dist/service/config/relation.d.ts +53 -0
- package/dist/service/config/relation.d.ts.map +1 -0
- package/dist/service/config/relation.js +66 -0
- package/dist/service/config/relation.js.map +1 -0
- package/dist/service/config/resource.d.ts +59 -0
- package/dist/service/config/resource.d.ts.map +1 -0
- package/dist/service/config/resource.js +75 -0
- package/dist/service/config/resource.js.map +1 -0
- package/dist/service/config/role.d.ts +55 -0
- package/dist/service/config/role.d.ts.map +1 -0
- package/dist/service/config/role.js +90 -0
- package/dist/service/config/role.js.map +1 -0
- package/dist/service/config/template.d.ts +65 -0
- package/dist/service/config/template.d.ts.map +1 -0
- package/dist/service/config/template.js +95 -0
- package/dist/service/config/template.js.map +1 -0
- package/dist/service/measure/index.d.ts +26 -0
- package/dist/service/measure/index.d.ts.map +1 -0
- package/dist/service/measure/index.js +36 -0
- package/dist/service/measure/index.js.map +1 -0
- package/dist/service/measure/query.d.ts +56 -0
- package/dist/service/measure/query.d.ts.map +1 -0
- package/dist/service/measure/query.js +86 -0
- package/dist/service/measure/query.js.map +1 -0
- package/dist/service/space/relation.d.ts +63 -0
- package/dist/service/space/relation.d.ts.map +1 -0
- package/dist/service/space/relation.js +102 -0
- package/dist/service/space/relation.js.map +1 -0
- package/dist/service/space/space.d.ts +81 -0
- package/dist/service/space/space.d.ts.map +1 -0
- package/dist/service/space/space.js +110 -0
- package/dist/service/space/space.js.map +1 -0
- package/dist/service/tenant/tenant.d.ts +52 -0
- package/dist/service/tenant/tenant.d.ts.map +1 -0
- package/dist/service/tenant/tenant.js +75 -0
- package/dist/service/tenant/tenant.js.map +1 -0
- package/dist/service/user/group.d.ts +47 -0
- package/dist/service/user/group.d.ts.map +1 -0
- package/dist/service/user/group.js +70 -0
- package/dist/service/user/group.js.map +1 -0
- package/dist/service/user/query.d.ts +25 -0
- package/dist/service/user/query.d.ts.map +1 -0
- package/dist/service/user/query.js +26 -0
- package/dist/service/user/query.js.map +1 -0
- package/dist/service/user/search.d.ts +25 -0
- package/dist/service/user/search.d.ts.map +1 -0
- package/dist/service/user/search.js +26 -0
- package/dist/service/user/search.js.map +1 -0
- package/dist/service/user/user.d.ts +37 -0
- package/dist/service/user/user.d.ts.map +1 -0
- package/dist/service/user/user.js +46 -0
- package/dist/service/user/user.js.map +1 -0
- package/dist/service/view/query.d.ts +52 -0
- package/dist/service/view/query.d.ts.map +1 -0
- package/dist/service/view/query.js +76 -0
- package/dist/service/view/query.js.map +1 -0
- package/dist/service/view/view.d.ts +76 -0
- package/dist/service/view/view.d.ts.map +1 -0
- package/dist/service/view/view.js +108 -0
- package/dist/service/view/view.js.map +1 -0
- package/dist/service/workitem/attachment.d.ts +143 -0
- package/dist/service/workitem/attachment.d.ts.map +1 -0
- package/dist/service/workitem/attachment.js +231 -0
- package/dist/service/workitem/attachment.js.map +1 -0
- package/dist/service/workitem/batch.d.ts +135 -0
- package/dist/service/workitem/batch.d.ts.map +1 -0
- package/dist/service/workitem/batch.js +146 -0
- package/dist/service/workitem/batch.js.map +1 -0
- package/dist/service/workitem/chat.d.ts +42 -0
- package/dist/service/workitem/chat.d.ts.map +1 -0
- package/dist/service/workitem/chat.js +50 -0
- package/dist/service/workitem/chat.js.map +1 -0
- package/dist/service/workitem/comment.d.ts +139 -0
- package/dist/service/workitem/comment.d.ts.map +1 -0
- package/dist/service/workitem/comment.js +180 -0
- package/dist/service/workitem/comment.js.map +1 -0
- package/dist/service/workitem/review.d.ts +44 -0
- package/dist/service/workitem/review.d.ts.map +1 -0
- package/dist/service/workitem/review.js +49 -0
- package/dist/service/workitem/review.js.map +1 -0
- package/dist/service/workitem/search.d.ts +213 -0
- package/dist/service/workitem/search.d.ts.map +1 -0
- package/dist/service/workitem/search.js +242 -0
- package/dist/service/workitem/search.js.map +1 -0
- package/dist/service/workitem/subtask.d.ts +193 -0
- package/dist/service/workitem/subtask.d.ts.map +1 -0
- package/dist/service/workitem/subtask.js +247 -0
- package/dist/service/workitem/subtask.js.map +1 -0
- package/dist/service/workitem/workItem.d.ts +225 -0
- package/dist/service/workitem/workItem.d.ts.map +1 -0
- package/dist/service/workitem/workItem.js +310 -0
- package/dist/service/workitem/workItem.js.map +1 -0
- package/dist/service/workitem/workflow.d.ts +214 -0
- package/dist/service/workitem/workflow.d.ts.map +1 -0
- package/dist/service/workitem/workflow.js +281 -0
- package/dist/service/workitem/workflow.js.map +1 -0
- package/dist/service/workitem/workhour.d.ts +63 -0
- package/dist/service/workitem/workhour.d.ts.map +1 -0
- package/dist/service/workitem/workhour.js +93 -0
- package/dist/service/workitem/workhour.js.map +1 -0
- package/dist/types/auth.d.ts +115 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +6 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/common.d.ts +354 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +14 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/config.d.ts +305 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +13 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/measure.d.ts +55 -0
- package/dist/types/measure.d.ts.map +1 -0
- package/dist/types/measure.js +6 -0
- package/dist/types/measure.js.map +1 -0
- package/dist/types/space.d.ts +164 -0
- package/dist/types/space.d.ts.map +1 -0
- package/dist/types/space.js +6 -0
- package/dist/types/space.js.map +1 -0
- package/dist/types/tenant.d.ts +106 -0
- package/dist/types/tenant.d.ts.map +1 -0
- package/dist/types/tenant.js +6 -0
- package/dist/types/tenant.js.map +1 -0
- package/dist/types/user.d.ts +110 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +6 -0
- package/dist/types/user.js.map +1 -0
- package/dist/types/view.d.ts +162 -0
- package/dist/types/view.d.ts.map +1 -0
- package/dist/types/view.js +6 -0
- package/dist/types/view.js.map +1 -0
- package/dist/types/workitem.d.ts +1523 -0
- package/dist/types/workitem.d.ts.map +1 -0
- package/dist/types/workitem.js +6 -0
- package/dist/types/workitem.js.map +1 -0
- 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
|