@izara_project/izara-core-library-asynchronous-flow 1.0.13 → 1.0.15

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/index.js CHANGED
@@ -33,7 +33,10 @@ module.exports = {
33
33
  // Awaiting Multiple Steps
34
34
  createAwaitingMultipleStepsWithAdditionalAttributes: asyncFlowSharedLib.createAwaitingMultipleStepsWithAdditionalAttributes,
35
35
  createAwaitingMultipleSteps: asyncFlowSharedLib.createAwaitingMultipleSteps,
36
-
36
+ findPendingStepIdsAwaitingMultipleSteps: asyncFlowSharedLib.findPendingStepIdsAwaitingMultipleSteps,
37
+ findPendingStepsAwaitingMultipleSteps: asyncFlowSharedLib.findPendingStepIdsAwaitingMultipleSteps,
38
+ findPendingStepAwaitingMultipleSteps: asyncFlowSharedLib.findPendingStepIdsAwaitingMultipleSteps,
39
+ findAwaitingMultipleStepByPending: asyncFlowSharedLib.findAwaitingMultipleStepByPending,
37
40
  // Awaiting Step
38
41
  createAwaitingStep: asyncFlowSharedLib.createAwaitingStep,
39
42
  findPendingStepIdsAwaitingStep: asyncFlowSharedLib.findPendingStepIdsAwaitingStep,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@izara_project/izara-core-library-asynchronous-flow",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
4
4
  "description": "Shared asynchronous flow logic",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -188,6 +188,85 @@ async function createAwaitingMultipleSteps(
188
188
 
189
189
  }
190
190
 
191
+ async function findPendingStepIdsAwaitingMultipleSteps(
192
+ _izContext,
193
+ awaitingStepId
194
+ ) {
195
+
196
+ let pendingStepIds = [];
197
+
198
+ let listPendingStepIds = await dynamodbSharedLib.query(
199
+ _izContext,
200
+ await dynamodbSharedLib.tableName(_izContext, "AwaitingMultipleSteps"),
201
+ {
202
+ awaitingStepId: awaitingStepId
203
+ }
204
+ );
205
+
206
+ for (let idx = 0; idx < listPendingStepIds.Items.length; idx++) {
207
+ pendingStepIds.push(listPendingStepIds.Items[idx].pendingStepId)
208
+ }
209
+
210
+ return pendingStepIds
211
+ }
212
+
213
+ async function findPendingStepsAwaitingMultipleSteps(
214
+ _izContext,
215
+ awaitingStepId
216
+ ) {
217
+
218
+ let listPendingSteps = await dynamodbSharedLib.query(
219
+ _izContext,
220
+ await dynamodbSharedLib.tableName(_izContext, "AwaitingMultipleSteps"),
221
+ {
222
+ awaitingStepId: awaitingStepId
223
+ }
224
+ );
225
+ _izContext.logger.debug("Record of awaitingStepId", listPendingSteps);
226
+ return listPendingSteps.Items;
227
+ }
228
+
229
+ async function findPendingStepAwaitingMultipleSteps(
230
+ _izContext,
231
+ awaitingStepId
232
+ ) {
233
+
234
+ let listPendingSteps = await dynamodbSharedLib.query(
235
+ _izContext,
236
+ await dynamodbSharedLib.tableName(_izContext, "AwaitingMultipleSteps"),
237
+ {
238
+ awaitingStepId: awaitingStepId
239
+ }
240
+ );
241
+ _izContext.logger.debug("Record of awaitingStepId", listPendingSteps)
242
+
243
+ if (listPendingSteps.Items.length !== 1) {
244
+ throw new NoRetryError("listPendingSteps not equals 1")
245
+ };
246
+ return listPendingSteps.Items[0];
247
+ }
248
+
249
+ // Use case:
250
+ // Use only after checkAllAwaitingStepsFinished
251
+ // Do NOT delete records in both tables (AwaitingMultipleSteps, AwaitingMultipleStepByPending) if AwaitingMultipleSteps is not yet finished
252
+ // Delete records from both tables only when checkAllAwaitingStepsFinished = true
253
+ // Example usage: flow validateCart lambda ProcessCartOrderFromTraversal
254
+ async function findAwaitingMultipleStepByPending(
255
+ _izContext,
256
+ pendingStepId
257
+ ) {
258
+
259
+ let listAwitingSteps = await dynamodbSharedLib.query(
260
+ _izContext,
261
+ await dynamodbSharedLib.tableName(_izContext, "AwaitingMultipleStepByPending"),
262
+ {
263
+ pendingStepId: pendingStepId
264
+ }
265
+ );
266
+ _izContext.logger.debug("Record of AwaitingMultipleStepByPending", listAwitingSteps);
267
+ return listAwitingSteps.Items;
268
+ }
269
+
191
270
  //====================================== AwaitingStep //======================================
192
271
  // AwaitingStep is when a flow is awaiting one external flow, and will continue it's flow once that one external flow is complete
193
272
  // One awaitingStepId can have multiple pendingStepIds that are awaiting it
@@ -314,14 +393,16 @@ async function checkAllAwaitingStepsFinished(
314
393
  _izContext,
315
394
  pendingStepId,
316
395
  currentAwaitingStepId = null,
317
- errorsFound = []
396
+ errorsFound = [],
397
+ additionalAttributes = {}
318
398
  ) {
319
399
 
320
400
  let remaining = await checkAllAwaitingStepsFinishedWithError(
321
401
  _izContext,
322
402
  pendingStepId,
323
403
  currentAwaitingStepId,
324
- errorsFound
404
+ errorsFound,
405
+ additionalAttributes
325
406
  );
326
407
  return remaining;
327
408
  }
@@ -332,7 +413,8 @@ async function checkAllAwaitingStepsFinishedWithError(
332
413
  _izContext,
333
414
  pendingStepId,
334
415
  currentAwaitingStepId = null,
335
- errorsFound = []
416
+ errorsFound = [],
417
+ additionalAttributes = {}
336
418
  ) {
337
419
  _izContext.logger.debug("Lib:checkAllAwaitingStepsFinishedWithError", {
338
420
  pendingStepId: pendingStepId,
@@ -350,7 +432,8 @@ async function checkAllAwaitingStepsFinishedWithError(
350
432
  },
351
433
  {
352
434
  complete: true,
353
- errorsFound: errorsFound
435
+ errorsFound: errorsFound,
436
+ ...additionalAttributes
354
437
  },
355
438
  );
356
439
 
@@ -450,12 +533,13 @@ async function clearAllAwaitingSteps(
450
533
  promiseArray.push(
451
534
  dynamodbSharedLib.deleteItem(
452
535
  _izContext,
453
- "AwaitingMultipleSteps",
536
+ await dynamodbSharedLib.tableName(_izContext, "AwaitingMultipleSteps"),
454
537
  {
455
538
  awaitingStepId: listPendingStepIds.Items[idx].awaitingStepId,
456
539
  pendingStepId: listPendingStepIds.Items[idx].pendingStepId
457
540
  }
458
- ));
541
+ )
542
+ );
459
543
 
460
544
  _izContext.logger.debug(`delete item in dynamodb AwaitingMultipleStepByPending`)
461
545
  promiseArray.push(
@@ -466,8 +550,8 @@ async function clearAllAwaitingSteps(
466
550
  pendingStepId: listPendingStepIds.Items[idx].pendingStepId,
467
551
  awaitingStepId: listPendingStepIds.Items[idx].awaitingStepId
468
552
  }
469
- ));
470
-
553
+ )
554
+ );
471
555
  }
472
556
 
473
557
  await Promise.all(promiseArray);
@@ -938,6 +1022,10 @@ module.exports = {
938
1022
  checkAllAwaitingStepsFinished,
939
1023
  clearAllAwaitingSteps,
940
1024
  removeAwaitingMultipleStep,
1025
+ findPendingStepIdsAwaitingMultipleSteps,
1026
+ findPendingStepsAwaitingMultipleSteps,
1027
+ findPendingStepAwaitingMultipleSteps,
1028
+ findAwaitingMultipleStepByPending,
941
1029
 
942
1030
  // AwaitingStep functions
943
1031
  createAwaitingStep,