@webitel/api-services 0.1.68 → 0.1.70

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 (96) hide show
  1. package/package.json +3 -1
  2. package/src/api/clients/_shared/types.ts +25 -0
  3. package/src/api/clients/caseServiceCatalogs/serviceCatalogs.ts +37 -71
  4. package/src/api/clients/caseServices/services.ts +43 -57
  5. package/src/api/clients/index.ts +9 -0
  6. package/src/api/clients/queues/__tests__/fieldsToSend.spec.ts +135 -0
  7. package/src/api/clients/queues/__tests__/queueLogs.spec.ts +132 -0
  8. package/src/api/clients/queues/__tests__/queueMembers.spec.ts +175 -0
  9. package/src/api/clients/queues/__tests__/queues.spec.ts +130 -0
  10. package/src/api/clients/queues/defaults/__tests__/queueTypeDefaults.spec.ts +143 -0
  11. package/src/api/clients/queues/defaults/amd.ts +17 -0
  12. package/src/api/clients/queues/defaults/defaultQueue.ts +9 -0
  13. package/src/api/clients/queues/defaults/processing.ts +8 -4
  14. package/src/api/clients/queues/defaults/queueTypeDefaults.ts +305 -0
  15. package/src/api/clients/queues/queueAgents.ts +48 -0
  16. package/src/api/clients/queues/queueBuckets.ts +187 -0
  17. package/src/api/clients/queues/queueHooks.ts +184 -0
  18. package/src/api/clients/queues/queueLogs.ts +80 -0
  19. package/src/api/clients/queues/queueMembers.ts +426 -0
  20. package/src/api/clients/queues/queueResGroups.ts +176 -0
  21. package/src/api/clients/queues/queueSkills.ts +183 -0
  22. package/src/api/clients/queues/queueState.ts +97 -0
  23. package/src/api/clients/queues/queues.ts +124 -94
  24. package/src/api/clients/queues/scripts/__tests__/mapResetMembersFilters.spec.ts +132 -0
  25. package/src/api/clients/queues/scripts/mapResetMembersFilters.ts +52 -0
  26. package/src/enums/CallReportingStatus/CallReportingStatus.ts +13 -0
  27. package/src/enums/MemberStopCause/MemberStopCause.ts +13 -0
  28. package/src/enums/QueueStrategy/QueueStrategy.ts +27 -0
  29. package/src/enums/QueueType/QueueType.ts +31 -0
  30. package/src/enums/TimeBaseScore/TimeBaseScore.ts +6 -0
  31. package/src/enums/TypesResourceStrategy/TypesResourceStrategy.ts +7 -0
  32. package/src/enums/index.ts +21 -1
  33. package/src/scripts/index.ts +19 -1
  34. package/src/scripts/normalizeDatetime/normalizeDatetime.ts +132 -0
  35. package/src/validations/_shared/isFilled.ts +15 -0
  36. package/src/validations/_shared/lookup.validations.ts +28 -0
  37. package/src/validations/_shared/variablePair.validations.ts +18 -0
  38. package/src/validations/caseService/caseService.validations.ts +15 -0
  39. package/src/validations/caseServiceCatalog/caseServiceCatalog.validations.ts +23 -0
  40. package/src/validations/index.ts +14 -0
  41. package/src/validations/queue/__tests__/queue.validations.spec.ts +159 -0
  42. package/src/validations/queue/queue.rules.ts +166 -0
  43. package/src/validations/queue/queue.validations.ts +105 -0
  44. package/src/validations/queue/queueAmd.validations.ts +22 -0
  45. package/src/validations/queue/queuePayload.validations.ts +71 -0
  46. package/src/validations/queue/taskProcessing.validations.ts +21 -0
  47. package/src/validations/queueBucket/queueBucket.validations.ts +10 -0
  48. package/src/validations/queueHook/queueHook.validations.ts +10 -0
  49. package/src/validations/queueMember/memberCommunication.validations.ts +25 -0
  50. package/src/validations/queueMember/queueMember.validations.ts +38 -0
  51. package/src/validations/queueResGroup/queueResGroup.validations.ts +15 -0
  52. package/src/validations/queueSkill/queueSkill.validations.ts +42 -0
  53. package/types/.tsbuildinfo +1 -1
  54. package/types/api/clients/_shared/types.d.ts +20 -0
  55. package/types/api/clients/caseServices/services.d.ts +4 -2
  56. package/types/api/clients/index.d.ts +9 -0
  57. package/types/api/clients/queues/defaults/amd.d.ts +17 -0
  58. package/types/api/clients/queues/defaults/defaultQueue.d.ts +9 -0
  59. package/types/api/clients/queues/defaults/processing.d.ts +7 -2
  60. package/types/api/clients/queues/defaults/queueTypeDefaults.d.ts +31 -0
  61. package/types/api/clients/queues/queueAgents.d.ts +7 -0
  62. package/types/api/clients/queues/queueBuckets.d.ts +12 -0
  63. package/types/api/clients/queues/queueHooks.d.ts +12 -0
  64. package/types/api/clients/queues/queueLogs.d.ts +7 -0
  65. package/types/api/clients/queues/queueMembers.d.ts +30 -0
  66. package/types/api/clients/queues/queueResGroups.d.ts +15 -0
  67. package/types/api/clients/queues/queueSkills.d.ts +12 -0
  68. package/types/api/clients/queues/queueState.d.ts +8 -0
  69. package/types/api/clients/queues/queues.d.ts +9 -1
  70. package/types/api/clients/queues/scripts/mapResetMembersFilters.d.ts +30 -0
  71. package/types/enums/CallReportingStatus/CallReportingStatus.d.ts +11 -0
  72. package/types/enums/MemberStopCause/MemberStopCause.d.ts +11 -0
  73. package/types/enums/QueueStrategy/QueueStrategy.d.ts +21 -0
  74. package/types/enums/QueueType/QueueType.d.ts +28 -0
  75. package/types/enums/TimeBaseScore/TimeBaseScore.d.ts +5 -0
  76. package/types/enums/TypesResourceStrategy/TypesResourceStrategy.d.ts +5 -0
  77. package/types/enums/index.d.ts +7 -1
  78. package/types/scripts/index.d.ts +3 -1
  79. package/types/scripts/normalizeDatetime/normalizeDatetime.d.ts +14 -0
  80. package/types/validations/_shared/isFilled.d.ts +9 -0
  81. package/types/validations/_shared/lookup.validations.d.ts +18 -0
  82. package/types/validations/_shared/variablePair.validations.d.ts +16 -0
  83. package/types/validations/caseService/caseService.validations.d.ts +20 -0
  84. package/types/validations/caseServiceCatalog/caseServiceCatalog.validations.d.ts +21 -0
  85. package/types/validations/index.d.ts +14 -0
  86. package/types/validations/queue/queue.rules.d.ts +21 -0
  87. package/types/validations/queue/queue.validations.d.ts +285 -0
  88. package/types/validations/queue/queueAmd.validations.d.ts +22 -0
  89. package/types/validations/queue/queuePayload.validations.d.ts +75 -0
  90. package/types/validations/queue/taskProcessing.validations.d.ts +22 -0
  91. package/types/validations/queueBucket/queueBucket.validations.d.ts +9 -0
  92. package/types/validations/queueHook/queueHook.validations.d.ts +10 -0
  93. package/types/validations/queueMember/memberCommunication.validations.d.ts +16 -0
  94. package/types/validations/queueMember/queueMember.validations.d.ts +48 -0
  95. package/types/validations/queueResGroup/queueResGroup.validations.d.ts +11 -0
  96. package/types/validations/queueSkill/queueSkill.validations.d.ts +34 -0
@@ -0,0 +1,80 @@
1
+ import { getMemberService } from '@webitel/api-services/gen';
2
+ import { normalizeDatetimeRange } from '../../../scripts';
3
+ import { getDefaultGetListResponse, getDefaultGetParams } from '../../defaults';
4
+ import {
5
+ applyTransform,
6
+ merge,
7
+ notify,
8
+ snakeToCamel,
9
+ starToSearch,
10
+ } from '../../transformers';
11
+ import type { ApiParams } from '../_shared/types';
12
+
13
+ const getQueueLogs = async (params: ApiParams) => {
14
+ const {
15
+ parentId,
16
+ page,
17
+ size,
18
+ search,
19
+ sort = '+joined_at',
20
+ fields,
21
+ joinedAt,
22
+ leavingAt,
23
+ offeringAt,
24
+ duration,
25
+ result,
26
+ agent,
27
+ bucket,
28
+ } = applyTransform(params, [
29
+ merge(getDefaultGetParams()),
30
+ ({ joinedAt, leavingAt, offeringAt, ...rest }) => ({
31
+ ...rest,
32
+ joinedAt: normalizeDatetimeRange(joinedAt),
33
+ leavingAt: normalizeDatetimeRange(leavingAt),
34
+ offeringAt: normalizeDatetimeRange(offeringAt),
35
+ }),
36
+ starToSearch('search'),
37
+ ]);
38
+
39
+ try {
40
+ const response = await getMemberService().searchAttemptsHistory({
41
+ page,
42
+ size,
43
+ // the generated param is `q`; `search` is what the datalist store sends
44
+ q: search,
45
+ sort,
46
+ fields,
47
+ // repeated params, even for the single queue this tab shows
48
+ queueId: [
49
+ String(parentId),
50
+ ],
51
+ agentId: agent,
52
+ bucketId: bucket,
53
+ result,
54
+ 'joined_at.from': joinedAt?.from,
55
+ 'joined_at.to': joinedAt?.to,
56
+ 'leaving_at.from': leavingAt?.from,
57
+ 'leaving_at.to': leavingAt?.to,
58
+ 'offering_at.from': offeringAt?.from,
59
+ 'offering_at.to': offeringAt?.to,
60
+ 'duration.from': duration?.from,
61
+ 'duration.to': duration?.to,
62
+ });
63
+ const { items, next } = applyTransform(response.data, [
64
+ snakeToCamel(),
65
+ merge(getDefaultGetListResponse()),
66
+ ]);
67
+ return {
68
+ items,
69
+ next,
70
+ };
71
+ } catch (err) {
72
+ throw applyTransform(err, [
73
+ notify,
74
+ ]);
75
+ }
76
+ };
77
+
78
+ export const QueueLogsAPI = {
79
+ getList: getQueueLogs,
80
+ };
@@ -0,0 +1,426 @@
1
+ import { getMemberService } from '@webitel/api-services/gen';
2
+ import { getShallowFieldsToSendFromZodSchema } from '@webitel/api-services/gen/utils';
3
+ import { queueMemberSchema } from '@webitel/api-services/validations';
4
+ import deepCopy from 'deep-copy';
5
+ import { normalizeDatetimeRange } from '../../../scripts';
6
+ import { getDefaultGetListResponse, getDefaultGetParams } from '../../defaults';
7
+ import {
8
+ applyTransform,
9
+ camelToSnake,
10
+ merge,
11
+ notify,
12
+ sanitize,
13
+ snakeToCamel,
14
+ starToSearch,
15
+ } from '../../transformers';
16
+ import type {
17
+ ApiId,
18
+ ApiParams,
19
+ NestedAddItemParams,
20
+ NestedDeleteItemParams,
21
+ NestedGetItemParams,
22
+ NestedUpdateItemParams,
23
+ } from '../_shared/types';
24
+ import {
25
+ mapResetMembersFilters,
26
+ mapResetMembersQuantityFilters,
27
+ } from './scripts/mapResetMembersFilters';
28
+
29
+ /** `variables` is a user-keyed map; its keys must survive case conversion. */
30
+ const doNotConvertKeys = [
31
+ 'variables',
32
+ ];
33
+
34
+ const fieldsToSend = [
35
+ ...getShallowFieldsToSendFromZodSchema(queueMemberSchema),
36
+ // injected by preRequestHandler; not part of the form, so not in the schema
37
+ 'queueId',
38
+ ];
39
+
40
+ const defaultSingleObjectCommunication = {
41
+ destination: '',
42
+ display: '',
43
+ priority: 0,
44
+ type: {},
45
+ resource: {},
46
+ description: '',
47
+ dtmf: '',
48
+ };
49
+
50
+ const mapDefaultCommunications = (item: ApiParams) => {
51
+ const copy = deepCopy(item);
52
+ return copy.communications
53
+ ? copy.communications.map((comm: ApiParams) => ({
54
+ ...defaultSingleObjectCommunication,
55
+ ...comm,
56
+ }))
57
+ : [];
58
+ };
59
+
60
+ /**
61
+ * NB: communications are deliberately sent whole rather than through a
62
+ * field whitelist. The original code looked like it whitelisted them, but
63
+ * called the curried `sanitize` with two arguments, so it built a function and
64
+ * threw it away — communications have always gone out complete. Applying the
65
+ * whitelist now would strip each communication's `id`, which the backend needs
66
+ * to update rather than recreate them.
67
+ */
68
+ const preRequestHandler = (item: ApiParams) => {
69
+ const copy = deepCopy(item);
70
+ const variables = (copy.variables ?? []).reduce(
71
+ (acc: ApiParams, variable: ApiParams) => {
72
+ if (!variable.key) return acc;
73
+ acc[variable.key] = variable.value;
74
+ return acc;
75
+ },
76
+ {},
77
+ );
78
+ return {
79
+ ...copy,
80
+ variables,
81
+ };
82
+ };
83
+
84
+ const getMembersList = async (params: ApiParams) => {
85
+ const listHandler = (items: ApiParams[]) => {
86
+ const copy = deepCopy(items);
87
+ return copy.map((item: ApiParams) => ({
88
+ ...item,
89
+ communications: applyTransform(item, [
90
+ mapDefaultCommunications,
91
+ ]),
92
+ }));
93
+ };
94
+
95
+ const {
96
+ page,
97
+ size,
98
+ search,
99
+ sort,
100
+ fields,
101
+ id,
102
+ parentId,
103
+ createdAt,
104
+ offeringAt,
105
+ bucket,
106
+ memberPriority,
107
+ stopCause,
108
+ agent,
109
+ attempts,
110
+ name,
111
+ destination,
112
+ } = applyTransform(params, [
113
+ merge(getDefaultGetParams()),
114
+ ({ createdAt, offeringAt, from, to, cause, stopCause, ...rest }) => ({
115
+ ...rest,
116
+ createdAt: normalizeDatetimeRange(
117
+ createdAt ??
118
+ (from != null || to != null
119
+ ? {
120
+ from,
121
+ to,
122
+ }
123
+ : undefined),
124
+ ),
125
+ offeringAt: normalizeDatetimeRange(offeringAt),
126
+ stopCause: stopCause ?? cause,
127
+ }),
128
+ starToSearch('search'),
129
+ ]);
130
+
131
+ try {
132
+ const response = await getMemberService().searchMemberInQueue(
133
+ Number(parentId),
134
+ {
135
+ page,
136
+ size,
137
+ // the generated param is `q`; `search` is what the datalist store sends
138
+ q: search,
139
+ sort,
140
+ fields,
141
+ id,
142
+ bucketId: bucket,
143
+ stopCause,
144
+ agentId: agent,
145
+ 'created_at.from': createdAt?.from,
146
+ 'created_at.to': createdAt?.to,
147
+ 'offering_at.from': offeringAt?.from,
148
+ 'offering_at.to': offeringAt?.to,
149
+ 'priority.from': memberPriority?.from,
150
+ 'priority.to': memberPriority?.to,
151
+ 'attempts.from': attempts?.from,
152
+ 'attempts.to': attempts?.to,
153
+ name,
154
+ destination,
155
+ },
156
+ );
157
+ const { items, next } = applyTransform(response.data, [
158
+ snakeToCamel(doNotConvertKeys),
159
+ merge(getDefaultGetListResponse()),
160
+ ]);
161
+ return {
162
+ items: applyTransform(items, [
163
+ listHandler,
164
+ ]),
165
+ next,
166
+ };
167
+ } catch (err) {
168
+ throw applyTransform(err, [
169
+ notify,
170
+ ]);
171
+ }
172
+ };
173
+
174
+ const getMember = async ({ parentId, itemId: id }: NestedGetItemParams) => {
175
+ const responseHandler = (response: ApiParams) => {
176
+ const copy = deepCopy(response);
177
+ let variables: ApiParams[] = [];
178
+ if (copy.variables) {
179
+ variables = Object.keys(copy.variables).map((key) => ({
180
+ key,
181
+ value: copy.variables[key],
182
+ }));
183
+ }
184
+ const communications = mapDefaultCommunications(copy);
185
+ return {
186
+ ...response,
187
+ variables,
188
+ communications,
189
+ };
190
+ };
191
+
192
+ try {
193
+ const response = await getMemberService().readMember(
194
+ String(parentId),
195
+ String(id),
196
+ );
197
+ return applyTransform(response.data, [
198
+ snakeToCamel(doNotConvertKeys),
199
+ responseHandler,
200
+ ]);
201
+ } catch (err) {
202
+ throw applyTransform(err, [
203
+ notify,
204
+ ]);
205
+ }
206
+ };
207
+
208
+ const addMember = async ({ parentId, itemInstance }: NestedAddItemParams) => {
209
+ const item = applyTransform(itemInstance, [
210
+ preRequestHandler,
211
+ sanitize(fieldsToSend),
212
+ camelToSnake(doNotConvertKeys),
213
+ ]);
214
+ try {
215
+ const response = await getMemberService().createMember(
216
+ String(parentId),
217
+ item,
218
+ );
219
+ return applyTransform(response.data, [
220
+ snakeToCamel(doNotConvertKeys),
221
+ ]);
222
+ } catch (err) {
223
+ throw applyTransform(err, [
224
+ notify,
225
+ ]);
226
+ }
227
+ };
228
+
229
+ const updateMember = async ({
230
+ itemInstance,
231
+ itemId: id,
232
+ parentId,
233
+ }: NestedUpdateItemParams) => {
234
+ const body = applyTransform(itemInstance, [
235
+ preRequestHandler,
236
+ sanitize(fieldsToSend),
237
+ camelToSnake(doNotConvertKeys),
238
+ ]);
239
+ try {
240
+ const response = await getMemberService().updateMember(
241
+ String(parentId),
242
+ String(id),
243
+ body,
244
+ );
245
+ return applyTransform(response.data, [
246
+ snakeToCamel(doNotConvertKeys),
247
+ ]);
248
+ } catch (err) {
249
+ throw applyTransform(err, [
250
+ notify,
251
+ ]);
252
+ }
253
+ };
254
+
255
+ const deleteMember = async ({ parentId, id }: NestedDeleteItemParams) => {
256
+ try {
257
+ const response = await getMemberService().deleteMember(
258
+ String(parentId),
259
+ String(id),
260
+ );
261
+ return applyTransform(response.data, []);
262
+ } catch (err) {
263
+ throw applyTransform(err, [
264
+ notify,
265
+ ]);
266
+ }
267
+ };
268
+
269
+ /**
270
+ * How many members the current filter set would reset. A GET, so the nested
271
+ * range messages go out as dotted query keys — see mapResetMembersQuantityFilters.
272
+ */
273
+ const getMembersQuantity = async ({
274
+ parentId,
275
+ filters,
276
+ }: {
277
+ parentId: ApiId;
278
+ filters?: ApiParams;
279
+ }) => {
280
+ const params = applyTransform(filters, [
281
+ mapResetMembersQuantityFilters,
282
+ starToSearch('q'),
283
+ ]);
284
+
285
+ try {
286
+ const response = await getMemberService().resetMembersCount(
287
+ String(parentId),
288
+ params,
289
+ );
290
+ // int64, so the service types it as a string
291
+ return Number(response?.data?.count ?? 0);
292
+ } catch (err) {
293
+ throw applyTransform(err, [
294
+ notify,
295
+ ]);
296
+ }
297
+ };
298
+
299
+ const resetMembers = async ({
300
+ parentId,
301
+ filters,
302
+ }: {
303
+ parentId: ApiId;
304
+ filters?: ApiParams;
305
+ }) => {
306
+ const body = applyTransform(filters, [
307
+ mapResetMembersFilters,
308
+ starToSearch('q'),
309
+ ]);
310
+
311
+ try {
312
+ const response = await getMemberService().resetMembers(
313
+ String(parentId),
314
+ body,
315
+ );
316
+ return applyTransform(response.data, [
317
+ snakeToCamel(doNotConvertKeys),
318
+ ]);
319
+ } catch (err) {
320
+ throw applyTransform(err, [
321
+ notify,
322
+ ]);
323
+ }
324
+ };
325
+
326
+ const resetActiveAttempts = async (body: ApiParams) => {
327
+ try {
328
+ const response = await getMemberService().resetActiveAttempts(body);
329
+ return applyTransform(response.data, []);
330
+ } catch (err) {
331
+ throw applyTransform(err, [
332
+ notify,
333
+ ]);
334
+ }
335
+ };
336
+
337
+ /** CSV import. Not part of the ApiModule contract — called straight from the popup. */
338
+ const addMembersBulk = async ({
339
+ parentId,
340
+ fileName,
341
+ items,
342
+ }: {
343
+ parentId: ApiId;
344
+ fileName: string;
345
+ items: ApiParams[];
346
+ }) => {
347
+ const body = {
348
+ parentId,
349
+ fileName,
350
+ items,
351
+ };
352
+ try {
353
+ const response = await getMemberService().createMemberBulk(
354
+ String(parentId),
355
+ body,
356
+ );
357
+ return applyTransform(response.data, [
358
+ snakeToCamel(doNotConvertKeys),
359
+ notify(({ callback }: ApiParams) =>
360
+ callback({
361
+ type: 'success',
362
+ text: 'Successfully added',
363
+ }),
364
+ ),
365
+ ]);
366
+ } catch (err) {
367
+ throw applyTransform(err, [
368
+ notify,
369
+ ]);
370
+ }
371
+ };
372
+
373
+ /**
374
+ * Deletes by explicit ids, or by the current filter set when `id` is omitted.
375
+ * `withoutMembers: true` is carried over from the original as-is.
376
+ */
377
+ const deleteMembersBulk = async ({
378
+ parentId,
379
+ id,
380
+ filters = {},
381
+ }: {
382
+ parentId: ApiId;
383
+ id?: ApiId[];
384
+ filters?: ApiParams;
385
+ }) => {
386
+ const created = range(filters.createdAt, filters.from, filters.to);
387
+
388
+ let body: ApiParams = {
389
+ id,
390
+ q: filters.search,
391
+ createdAt: created.from || created.to ? created : undefined,
392
+ priority: filters.memberPriority ?? filters.priority,
393
+ stopCause: filters.stopCause ?? filters.cause,
394
+ bucketId: filters.bucket,
395
+ withoutMembers: true,
396
+ };
397
+
398
+ body = applyTransform(body, [
399
+ camelToSnake(),
400
+ ]);
401
+
402
+ try {
403
+ const response = await getMemberService().deleteMembers(
404
+ String(parentId),
405
+ body,
406
+ );
407
+ return applyTransform(response.data, []);
408
+ } catch (err) {
409
+ throw applyTransform(err, [
410
+ notify,
411
+ ]);
412
+ }
413
+ };
414
+
415
+ export const QueueMembersAPI = {
416
+ getList: getMembersList,
417
+ getQuantity: getMembersQuantity,
418
+ get: getMember,
419
+ add: addMember,
420
+ addBulk: addMembersBulk,
421
+ update: updateMember,
422
+ delete: deleteMember,
423
+ deleteBulk: deleteMembersBulk,
424
+ resetMembers,
425
+ resetActiveAttempts,
426
+ };
@@ -0,0 +1,176 @@
1
+ import { getQueueResourcesService } from '@webitel/api-services/gen';
2
+ import { getShallowFieldsToSendFromZodSchema } from '@webitel/api-services/gen/utils';
3
+ import { queueResGroupSchema } from '@webitel/api-services/validations';
4
+ import { getDefaultGetListResponse, getDefaultGetParams } from '../../defaults';
5
+ import {
6
+ applyTransform,
7
+ camelToSnake,
8
+ merge,
9
+ notify,
10
+ sanitize,
11
+ snakeToCamel,
12
+ starToSearch,
13
+ } from '../../transformers';
14
+ import type {
15
+ ApiId,
16
+ ApiParams,
17
+ NestedAddItemParams,
18
+ NestedDeleteItemParams,
19
+ NestedGetItemParams,
20
+ NestedUpdateItemParams,
21
+ } from '../_shared/types';
22
+
23
+ /** No `patch` — the service exposes none, and the tab never offered one. */
24
+ const fieldsToSend = [
25
+ ...getShallowFieldsToSendFromZodSchema(queueResGroupSchema),
26
+ // injected by preRequestHandler; not part of the form, so not in the schema
27
+ 'queueId',
28
+ ];
29
+
30
+ const preRequestHandler = (parentId: ApiId) => (item: ApiParams) => ({
31
+ ...item,
32
+ queueId: parentId,
33
+ });
34
+
35
+ const getQueueResGroupsList = async (params: ApiParams) => {
36
+ const { parentId, page, size, search, sort, fields, id } = applyTransform(
37
+ params,
38
+ [
39
+ merge(getDefaultGetParams()),
40
+ starToSearch('search'),
41
+ ],
42
+ );
43
+
44
+ try {
45
+ const response = await getQueueResourcesService().searchQueueResourceGroup(
46
+ String(parentId),
47
+ {
48
+ page,
49
+ size,
50
+ // the generated param is `q`; `search` is what the datalist store sends
51
+ q: search,
52
+ sort,
53
+ fields,
54
+ id,
55
+ },
56
+ );
57
+ const { items, next } = applyTransform(response.data, [
58
+ snakeToCamel(),
59
+ merge(getDefaultGetListResponse()),
60
+ ]);
61
+ return {
62
+ items,
63
+ next,
64
+ };
65
+ } catch (err) {
66
+ throw applyTransform(err, [
67
+ notify,
68
+ ]);
69
+ }
70
+ };
71
+
72
+ const getQueueResGroup = async ({
73
+ parentId,
74
+ itemId: id,
75
+ domainId,
76
+ }: NestedGetItemParams & {
77
+ domainId?: string;
78
+ }) => {
79
+ try {
80
+ const response = await getQueueResourcesService().readQueueResourceGroup(
81
+ String(parentId),
82
+ String(id),
83
+ {
84
+ domainId,
85
+ },
86
+ );
87
+ return applyTransform(response.data, [
88
+ snakeToCamel(),
89
+ ]);
90
+ } catch (err) {
91
+ throw applyTransform(err, [
92
+ notify,
93
+ ]);
94
+ }
95
+ };
96
+
97
+ const addQueueResGroup = async ({
98
+ parentId,
99
+ itemInstance,
100
+ }: NestedAddItemParams) => {
101
+ const item = applyTransform(itemInstance, [
102
+ preRequestHandler(parentId),
103
+ sanitize(fieldsToSend),
104
+ camelToSnake(),
105
+ ]);
106
+ try {
107
+ const response = await getQueueResourcesService().createQueueResourceGroup(
108
+ String(parentId),
109
+ item,
110
+ );
111
+ return applyTransform(response.data, [
112
+ snakeToCamel(),
113
+ ]);
114
+ } catch (err) {
115
+ throw applyTransform(err, [
116
+ notify,
117
+ ]);
118
+ }
119
+ };
120
+
121
+ const updateQueueResGroup = async ({
122
+ parentId,
123
+ itemInstance,
124
+ itemId: id,
125
+ }: NestedUpdateItemParams) => {
126
+ const item = applyTransform(itemInstance, [
127
+ preRequestHandler(parentId),
128
+ sanitize(fieldsToSend),
129
+ camelToSnake(),
130
+ ]);
131
+ try {
132
+ const response = await getQueueResourcesService().updateQueueResourceGroup(
133
+ String(parentId),
134
+ String(id),
135
+ item,
136
+ );
137
+ return applyTransform(response.data, [
138
+ snakeToCamel(),
139
+ ]);
140
+ } catch (err) {
141
+ throw applyTransform(err, [
142
+ notify,
143
+ ]);
144
+ }
145
+ };
146
+
147
+ const deleteQueueResGroup = async ({
148
+ parentId,
149
+ id,
150
+ domainId,
151
+ }: NestedDeleteItemParams & {
152
+ domainId?: string;
153
+ }) => {
154
+ try {
155
+ const response = await getQueueResourcesService().deleteQueueResourceGroup(
156
+ String(parentId),
157
+ String(id),
158
+ {
159
+ domainId,
160
+ },
161
+ );
162
+ return applyTransform(response.data, []);
163
+ } catch (err) {
164
+ throw applyTransform(err, [
165
+ notify,
166
+ ]);
167
+ }
168
+ };
169
+
170
+ export const QueueResGroupsAPI = {
171
+ getList: getQueueResGroupsList,
172
+ get: getQueueResGroup,
173
+ add: addQueueResGroup,
174
+ update: updateQueueResGroup,
175
+ delete: deleteQueueResGroup,
176
+ };