@izara_project/izara-core-library-asynchronous-flow 1.0.14 → 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.14",
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
 
@@ -939,6 +1022,10 @@ module.exports = {
939
1022
  checkAllAwaitingStepsFinished,
940
1023
  clearAllAwaitingSteps,
941
1024
  removeAwaitingMultipleStep,
1025
+ findPendingStepIdsAwaitingMultipleSteps,
1026
+ findPendingStepsAwaitingMultipleSteps,
1027
+ findPendingStepAwaitingMultipleSteps,
1028
+ findAwaitingMultipleStepByPending,
942
1029
 
943
1030
  // AwaitingStep functions
944
1031
  createAwaitingStep,