@qrvey/data-persistence 0.5.13-552 → 0.5.14-607
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.
|
@@ -377,11 +377,21 @@ class PostgresqlClientService extends query_service_1.default {
|
|
|
377
377
|
}
|
|
378
378
|
else if (!dynamoFuncName) {
|
|
379
379
|
let expValue;
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
let
|
|
384
|
-
|
|
380
|
+
let columnName = path;
|
|
381
|
+
let setObjProperty = false;
|
|
382
|
+
let column = this.crudSchema.columns[columnName];
|
|
383
|
+
let columnType = column === null || column === void 0 ? void 0 : column.type;
|
|
384
|
+
if (!columnType) {
|
|
385
|
+
setObjProperty = true;
|
|
386
|
+
columnName = 'qvAttributes';
|
|
387
|
+
column = this.crudSchema.columns[columnName];
|
|
388
|
+
if ((column === null || column === void 0 ? void 0 : column.type) == undefined)
|
|
389
|
+
throw `Column type definition for column: (${path}) must be in the CrudSchema`;
|
|
390
|
+
columnType = Array.isArray(value) ? 'array' :
|
|
391
|
+
typeof value == 'object' ? 'object' :
|
|
392
|
+
'default';
|
|
393
|
+
}
|
|
394
|
+
switch (columnType) {
|
|
385
395
|
case 'object':
|
|
386
396
|
{
|
|
387
397
|
const valueSerialized = `${JSON.stringify(value).replace(/'/g, "''")}`;
|
|
@@ -389,16 +399,16 @@ class PostgresqlClientService extends query_service_1.default {
|
|
|
389
399
|
}
|
|
390
400
|
break;
|
|
391
401
|
case 'array':
|
|
392
|
-
|
|
393
|
-
expValue = `ARRAY[${formattedValue}]`;
|
|
402
|
+
expValue = `ARRAY[${(0, pg_format_1.literal)(value)}]`;
|
|
394
403
|
break;
|
|
395
404
|
default:
|
|
396
|
-
|
|
397
|
-
expValue = formattedValue;
|
|
405
|
+
expValue = (0, pg_format_1.literal)(value);
|
|
398
406
|
break;
|
|
399
407
|
}
|
|
400
|
-
|
|
401
|
-
|
|
408
|
+
if (setObjProperty) {
|
|
409
|
+
expValue = `jsonb_set(${(0, pg_format_1.ident)(columnName)}, '{${path}}', ${expValue}, true)`;
|
|
410
|
+
}
|
|
411
|
+
updateClauses.push(`${(0, pg_format_1.ident)(columnName)} = ${expValue}`);
|
|
402
412
|
}
|
|
403
413
|
});
|
|
404
414
|
this.setCommonColumnsQueryFunctions(jsonSetExpressionGroup, queryFunctions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgreSqlClient.service.js","sourceRoot":"","sources":["../../../../../src/services/cruds/postgresql/postgreSqlClient.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"postgreSqlClient.service.js","sourceRoot":"","sources":["../../../../../src/services/cruds/postgresql/postgreSqlClient.service.ts"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,+BAA+B;;;;;AAE/B,oDAA8D;AAY9D,oEAA2C;AAC3C,wDAOkC;AAElC,8DAA4D;AAC5D,gEAAsE;AAGtE,MAAqB,uBAA2B,SAAQ,uBAAY;IAEhE,YAAY,WAA8B,EAAE,UAAmB;QAC3D,KAAK,CAAC,UAAU,CAAC,CAAC;QA6Id,sBAAiB,GAAG,UAAU,KAAU;YAC5C,OAAO,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;QAC3C,CAAC,CAAC;QA9IE,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC;IAClC,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,6BAAiB,CAAC;IACvD,CAAC;IAED,IAAI,SAAS;QACT,OAAO,CACH,IAAA,0BAAY,EAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;YAC5C,IAAA,0BAAY,EAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CACtC,CAAC;IACN,CAAC;IAED,IAAI,eAAe;;QACf,OAAO,MAAA,IAAI,CAAC,UAAU,0CAAE,eAAe,CAAC;IAC5C,CAAC;IAED,gBAAgB,CAAC,QAAwB,EAAE,KAAa;QACpD,IACI,QAAQ,KAAK,0BAAc,CAAC,QAAQ;YACpC,QAAQ,KAAK,0BAAc,CAAC,YAAY,EAC1C,CAAC;YACC,OAAO,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;QAC7B,CAAC;aAAM,IAAI,QAAQ,KAAK,0BAAc,CAAC,WAAW,EAAE,CAAC;YACjD,OAAO,KAAK,GAAG,GAAG,CAAC;QACvB,CAAC;aAAM,CAAC;YACJ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEO,WAAW,CACf,QAAwB,EACxB,SAAiB,EACjB,YAAgC,EAChC,KAAU;;QAEV,MAAM,cAAc,GAAG,IAAA,mBAAO,EAAC,KAAK,CAAC,CAAC;QACtC,QAAQ,GAAG,QAAQ;YACf,CAAC,CAAE,QAAQ,CAAC,WAAW,EAAqB;YAC5C,CAAC,CAAC,0BAAc,CAAC,KAAK,CAAC;QAC3B,MAAM,gBAAgB,GAAG,wCAA4B,CAAC,QAAQ,CAAC,CAAC;QAEhE,IAAI,CAAC,gBAAgB;YACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;QAEhE,IAAI,QAAQ,CAAC;QACb,MAAM,cAAc,GAAG,IAAA,iBAAK,EAAC,SAAS,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,UAAU,GACZ,YAAY,KAAI,MAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,0CAAE,IAAI,CAAA,CAAC;QAE7D,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAExD,QAAQ,GAAG,KAAK,SAAS,UAAU,aAAa,KAAK,CAAC;YACtD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAChB,MAAM,mBAAmB,GACrB,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;gBACjD,QAAQ,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAC3C,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,QAAQ,GAAG,YAAY;gBACnB,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,wBAAwB,SAAS,IAAI,CAAC;QAChD,CAAC;QAED,IAAI,QAAQ,KAAK,0BAAc,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACxC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAO,CAAC;gBACpB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YACvB,OAAO,GAAG,QAAQ,IAAI,gBAAgB,KAAK,eAAe,CAAC,IAAI,CAC3D,IAAI,CACP,GAAG,CAAC;QACT,CAAC;QAED,IAAI,QAAQ,KAAK,0BAAc,CAAC,OAAO,EAAE,CAAC;YACtC,OAAO,GAAG,QAAQ,IAAI,gBAAgB,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,CAAC;QAED;;WAEG;QACH,IAAI,QAAQ,KAAK,0BAAc,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1D,OAAO,IAAI,QAAQ,IAAI,gBAAgB,IAAI,IAAA,mBAAO,EAC9C,KAAK,CACR,OAAO,QAAQ,WAAW,CAAC;QAChC,CAAC;QAED,IACI,QAAQ,KAAK,0BAAc,CAAC,SAAS;YACrC,QAAQ,KAAK,0BAAc,CAAC,KAAK,EACnC,CAAC;YACC,OAAO,GAAG,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QAC7C,CAAC;QAED,IACI,CAAC,QAAQ,KAAK,0BAAc,CAAC,QAAQ;YACjC,QAAQ,KAAK,0BAAc,CAAC,YAAY,CAAC;YAC7C,UAAU,KAAK,OAAO,EACxB,CAAC;YACC,MAAM,WAAW,GACb,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;YACrD,IAAI,YAAY,GAAG,GAAG,WAAW,UAAU,QAAQ,GAAG,CAAC;YAEvD,IAAI,QAAQ,KAAK,0BAAc,CAAC,YAAY,EAAE,CAAC;gBAC3C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACjB,YAAY,GAAG,SAAS,YAAY,IAAI,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACJ,YAAY,GAAG,SAAS,YAAY,QAAQ,QAAQ,WAAW,CAAC;gBACpE,CAAC;YACL,CAAC;YACD,OAAO,YAAY,CAAC;QACxB,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,GAAG,QAAQ,IAAI,gBAAgB,IAAI,IAAA,mBAAO,EAAC,aAAa,CAAC,EAAE,CAAC;IACvE,CAAC;IAEO,iBAAiB,CACrB,OAAqC,EACrC,aAAmC;QAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACzC,OAAO,IAAI,CAAC,WAAW,CACnB,MAAM,CAAC,QAA0B,EACjC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,KAAK,CACf,CAAC;YACN,CAAC,CAAC,CAAC;YACH,OAAO,aAAa,CAAC,IAAI,CACrB,IAAI,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,kCAAsB,CAAC,GAAG,GAAG,CACrD,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IAMD,kBAAkB,CAAC,OAAqC;QACpD,IAAI,aAAa,GAAW,EAAE,CAAC;QAC/B,IAAI,aAAa,GAAG,IAAI,CAAC;QAEzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,aAAa,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YACtD,CAAC;YAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,aAAa,IAAI,GAAG,CAAC;gBACrB,aAAa,IAAI,IAAI,CAAC,kBAAkB,CACpC,KAAyB,CAC5B,CAAC;gBACF,aAAa,IAAI,GAAG,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACH,KAAmB,CAAC,OAAO,CAAC,CAAC,MAAe,EAAE,EAAE;oBAC7C,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;wBACjC,MAAM,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAChC,MAA0B,CAC7B,GAAG,CAAC;oBACT,CAAC;yBAAM,CAAC;wBACJ,MAAM,GAAG,IAAI,CAAC,WAAW,CACrB,MAAM,CAAC,QAA0B,EACjC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,KAAK,CACf,CAAC;oBACN,CAAC;oBACD,aAAa,IAAI,GAAG,MAAM,IAAI,GAAG,GAAG,CAAC;gBACzC,CAAC,CAAC,CAAC;YACP,CAAC;YAED,aAAa,GAAG,KAAK,CAAC;QAC1B,CAAC;QAED,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC7D,OAAO,aAAa,CAAC;IACzB,CAAC;IAEO,iBAAiB,CAAC,IAAc;QACpC,OAAO,GAAG,IAAA,iBAAK,EAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,2BAAe,CAAC,GAAG,EAAE,CAAC;IAC5E,CAAC;IAEO,kBAAkB,CAAC,YAAwB;QAC/C,IAAI,CAAC;YACD,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,WAAW,CAAC,KAAY;QACpB,MAAM,aAAa,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;QACnD,IAAI,aAAa,EAAE,CAAC;YAChB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAClC,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC3D,CAAC;IACL,CAAC;IAED,WAAW,CAAC,KAAU;QAClB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAA;gBAAE,OAAO,IAAI,CAAC;YAChC,MAAM,aAAa,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;YACnD,IAAI,aAAa,EAAE,CAAC;gBAChB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACJ,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAChE,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAW;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CACjD,CAAC;QAEF,MAAM,KAAK,GAAG,IAAA,kBAAM,EAChB,eAAe,IAAA,iBAAK,EAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAA,iBAAK,EACxC,IAAI,CAAC,SAAS,CACjB,8BAA8B,EAC/B,IAAI,EACJ,MAAM,CACT,CAAC;QAEF,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEO,mBAAmB,CACvB,OAAqC;QAErC,MAAM,mBAAmB,GACrB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,IAAG,CAAC,CAAC;QAClD,MAAM,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChE,OAAO,mBAAmB,IAAI,uBAAuB,CAAC;IAC1D,CAAC;IAEO,0BAA0B,CAC9B,KAAa,EACb,OAAsC;QAEtC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3B,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAEO,iBAAiB,CACrB,KAAa,EACb,OAAsC;QAEtC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3B,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YACjC,KAAK,IAAI,UAAU,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,iBAAiB,CAAC,KAAa,EAAE,OAAoB;QACjD,IAAI,OAAO;YAAE,KAAK,IAAI,aAAa,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,oBAAoB,CACxB,KAAa,EACb,UAA4B;QAE5B,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;YACnC,IAAI,KAAK;gBAAE,KAAK,IAAI,UAAU,KAAK,EAAE,CAAC;YACtC,IAAI,IAAI;gBAAE,KAAK,IAAI,WAAW,IAAI,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,eAAe,CACnB,iBAAgD,EAChD,SAAmB,EAAE;QAErB,IAAI,iBAAiB;YACjB,OAAO,QAAQ,iBAAiB,uBAAuB,IAAA,oCAAqB,EACxE,iBAAiB,CACpB,GAAG,CAAC;QACT,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA;YAAE,OAAO,GAAG,CAAC;QAEhC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEO,WAAW,CAAC,MAAgB;QAChC,MAAM,iBAAiB,GAAa,MAAM,CAAC,IAAI,CAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAC1B,CAAC;QACF,MAAM,UAAU,GAAa,MAAM;aAC9B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAElC,MAAM;aACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1D,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,UAAU,CAAC,IAAI,CAAC,uBAAuB,KAAK,SAAS,KAAK,GAAG,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QACP,OAAO,UAAU,CAAC;IACtB,CAAC;IAEO,kBAAkB,CAAC,OAAuB;QAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;YAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAClE,OAAO,GAAG,KAAK,QAAQ,SAAS,GAAG,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,gBAAgB,CAAC,OAAwB;QACrC,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,CAAC;YAClB,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACrD,aAAa,GAAG,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,eAAe;YACvB,CAAC,CAAC,IAAA,iBAAK,EAAC,IAAI,CAAC,SAAS,CAAC;YACvB,CAAC,CAAC,GAAG,IAAA,iBAAK,EAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAA,iBAAK,EAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAwB,EAAE;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,KAAK,GAAG,UAAU,IAAI,CAAC,eAAe,CACtC,OAAO,CAAC,iBAAiB,EACzB,OAAO,CAAC,MAAM,CACjB,SAAS,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QAChC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACvD,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAChB,KAAK,GAAG,GAAG,aAAa,IAAI,KAAK,EAAE,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,KAAU;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,IAAI,CAAC;YAC7B,MAAM,cAAc,GAAG,KAAK;iBACvB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACV,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,OAAO,IAAI,IAAI,GAAG,CAAC;gBACvB,CAAC;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAClC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACJ,OAAO,IAAI,CAAC;gBAChB,CAAC;YACL,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC,CAAC;YAEf,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACJ,OAAO,IAAA,mBAAO,EAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CACf,OAAqC,EACrC,IAAkB;QAElB,IAAI,KAAK,GAAG,UAAU,IAAA,iBAAK,EAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAA,iBAAK,EAC/C,IAAI,CAAC,SAAS,CACjB,MAAM,CAAC;QAER,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC5D,MAAM,OAAO,GAAG,IAAA,mBAAO,EAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACjD,OAAO,GAAG,IAAA,iBAAK,EAAC,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAExC,KAAK,IAAI,SAAS,CAAC;QACnB,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,aAAa,CACf,cAAwB,EACxB,IAAO;QAEP,MAAM,aAAa,GAAG,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,MAAM;YACzC,MAAM,CAAC,OAAO,CAAC,IAAW,CAAC;iBAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;iBAChD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAClB,MAAM,OAAO,GAAG,IAAA,mBAAO,EAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjD,OAAO,GAAG,IAAA,iBAAK,EAAC,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC;YACxC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEd,IAAI,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,CAAA;YACtB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAW,CAAC,CAAC,CAAC,0CAA0C;QACxF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAE,IAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE9E,IAAI,KAAK,GAAG,IAAA,kBAAM,EAAC,eAAe,IAAA,iBAAK,EAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAA,iBAAK,EACvD,IAAI,CAAC,SAAS,CACjB,kDAAkD,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAE9F,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;QAErD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEO,gCAAgC,CACpC,YAAyB;QAEzB,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;YACnD,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,aAAa,CACf,OAAoD,EACpD,kBAA2B,KAAK;QAEhC,IAAI,KAAK,GAAG,eAAe,IAAA,iBAAK,EAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAA,iBAAK,EACpD,IAAI,CAAC,SAAS,CACjB,EAAE,CAAC;QACJ,IAAI,OAAO,EAAE,CAAC;YACV,KAAK,IAAI,SAAS,CAAC;YAEnB,IAAI,eAAe,EAAE,CAAC;gBAClB,KAAK,IAAI,IAAI,CAAC,gCAAgC,CAC1C,OAAsB,CACzB,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAC3B,OAAuC,CAC1C,CAAC;YACN,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,SAAiB,EAAE,MAAc;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,uBAAuB;IAChC,8DAA8D;IAC9D,OAAqC,EACrC,OAA2B,EAC3B,UAA8C,EAAE;QAEhD,IAAI,KAAK,GAAG,UAAU,IAAA,iBAAK,EAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAA,iBAAK,EAC/C,IAAI,CAAC,SAAS,CACjB,MAAM,CAAC;QAER,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAExC,MAAM,SAAS,GAAG,IAAI,CAAC,mCAAmC,CACtD,GAAG,EACH,OAAO,EACP,OAAO,EACP,oCAAwB,CAAC,GAAG,CAC/B,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,mCAAmC,CACtD,GAAG,EACH,OAAO,EACP,OAAO,EACP,oCAAwB,CAAC,GAAG,CAC/B,CAAC;QAEF,MAAM,qBAAqB,GAAQ,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/D,MAAM,aAAa,GAAQ,EAAE,CAAC;QAC9B,MAAM,sBAAsB,GAAQ,EAAE,CAAC;QACvC,MAAM,cAAc,GAAQ,EAAE,CAAC;QAE/B,qBAAqB,CAAC,OAAO,CAAC,CAAC,UAAe,EAAE,EAAE;YAC9C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,GAC9D,UAAU,CAAC;YAEf,8BAA8B;YAC9B,IAAI,cAAc,EAAE,CAAC;gBACjB,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,CAC/C,IAAI,EACJ,KAAK,EACL;oBACI,eAAe;oBACf,UAAU;iBACb,CACJ,CAAC;gBACF,MAAM,UAAU,GAAW,QAAQ,CAAC,UAAU,CAAC;gBAC/C,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;oBACtC,sBAAsB,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACJ,sBAAsB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtD,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,QAAQ,CAAC;gBACb,IAAI,UAAU,GAAG,IAAI,CAAC;gBACtB,IAAI,cAAc,GAAG,KAAK,CAAC;gBAC3B,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAEjD,IAAI,UAAU,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC;gBAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;oBACd,cAAc,GAAG,IAAI,CAAC;oBACtB,UAAU,GAAG,cAAc,CAAC;oBAC5B,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAC7C,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,SAAS;wBACzB,MAAM,uCAAuC,IAAI,6BAA6B,CAAC;oBAEnF,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wBACzC,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;4BACrC,SAAS,CAAC;gBAClB,CAAC;gBAED,QAAQ,UAAU,EAAE,CAAC;oBACjB,KAAK,QAAQ;wBACT,CAAC;4BACG,MAAM,eAAe,GAAG,GAAG,IAAI,CAAC,SAAS,CACrC,KAAK,CACR,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;4BACxB,QAAQ,GAAG,IAAI,eAAe,UAAU,CAAC;wBAC7C,CAAC;wBACD,MAAM;oBACV,KAAK,OAAO;wBACR,QAAQ,GAAG,SAAS,IAAA,mBAAO,EAAC,KAAK,CAAC,GAAG,CAAC;wBACtC,MAAM;oBACV;wBACI,QAAQ,GAAG,IAAA,mBAAO,EAAC,KAAK,CAAC,CAAC;wBAC1B,MAAM;gBACd,CAAC;gBAED,IAAI,cAAc,EAAE,CAAC;oBACjB,QAAQ,GAAG,aAAa,IAAA,iBAAK,EAAC,UAAU,CAAC,OAAO,IAAI,OAAO,QAAQ,SAAS,CAAC;gBACjF,CAAC;gBAED,aAAa,CAAC,IAAI,CAAC,GAAG,IAAA,iBAAK,EAAC,UAAU,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8BAA8B,CAC/B,sBAAsB,EACtB,cAAc,CACjB,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAC/C,sBAAsB,CAAC,UAAU,CAAC,EAClC,WAAW,CACd,CAAC;gBAEF,aAAa,CAAC,IAAI,CAAC,GAAG,UAAU,MAAM,iBAAiB,EAAE,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;QACP,CAAC;QAED,kEAAkE;QAClE,IAAI,CAAC,qCAAqC,CACtC,cAAc,EACd,aAAa,CAChB,CAAC;QAEF,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAExC,KAAK,IAAI,SAAS,CAAC;QACnB,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEO,qCAAqC,CACzC,cAAmB,EACnB,aAAkB;QAElB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,cAAc,CAAC,OAAO,CAAC,CAAC,aAAkB,EAAE,EAAE;gBAC1C,IAAI,OAAO,aAAa,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;oBACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CACtC,aAAa,CAAC,KAAK,CAAC,cAAc,EAClC,cAAc,CACjB,CAAC;oBACF,aAAa,CAAC,IAAI,CACd,GAAG,IAAA,iBAAK,EAAC,aAAa,CAAC,IAAI,CAAC,MAAM,QAAQ,EAAE,CAC/C,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACJ,aAAa,CAAC,IAAI,CACd,GAAG,IAAA,iBAAK,EAAC,aAAa,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,KAAK,EAAE,CAC1D,CAAC;gBACN,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAEO,8BAA8B,CAClC,sBAA2B,EAC3B,cAAmB;QAEnB,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,WAAgB,EAAE,EAAE;YAC7D,cAAc,CAAC,OAAO,CAAC,CAAC,aAAkB,EAAE,KAAa,EAAE,EAAE;gBACzD,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC;gBAC7C,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;oBAC7B,sBAAsB,CAAC,WAAW,CAAC,CAAC,IAAI,iCACjC,aAAa,KAChB,cAAc,EAAE,IAAI,IACtB,CAAC;oBACH,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACK,oBAAoB,CACxB,kBAAuB,EACvB,YAAoB;QAEpB,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAC,UAAe,EAAE,KAAa,EAAE,EAAE;YAC1D,IAAI,iBAAiB,GAAG,YAAY,CAAC;YACrC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;YAC1C,0CAA0C;YAC1C,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;gBAC5B,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC1D,iBAAiB,GAAG,cAAc,CAAC,YAAY,CAAC;gBAChD,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;gBACnC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;YAC3C,CAAC;YACD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACd,iBAAiB,GAAG,GAAG,iBAAiB,IAAI,UAAU,IAAI,QAAQ,GAAG,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACJ,iBAAiB,GAAG,GAAG,iBAAiB,IAAI,iBAAiB,IAAI,QAAQ,GAAG,CAAC;YACjF,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACK,kBAAkB,CAAC,KAAU;QACjC,MAAM,eAAe,GACjB,OAAO,KAAK,IAAI,QAAQ;YACpB,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YAChD,CAAC,CAAC,KAAK,CAAC;QAChB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAEO,6BAA6B,CACjC,IAAY,EACZ,KAAU,EACV,OAAY;QAEZ,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAEhD,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CACrD,IAAI,EACJ,IAAI,CACP,GAAG,CAAC;QAEL,IAAI,UAAU,IAAI,oCAAwB,CAAC,GAAG,EAAE,CAAC;YAC7C,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5C,MAAM,UAAU,GAAG;oBACf,QAAQ,EAAE,KAAK,cAAc,0BAA0B,UAAU,QAAQ,cAAc,qBAAqB,eAAe,GAAG;oBAC9H,UAAU,EAAE,IAAI,UAAU,GAAG;iBAChC,CAAC;gBACF,OAAO,UAAU,CAAC;YACtB,CAAC;QACL,CAAC;QACD,OAAO;YACH,QAAQ,EAAE,KAAK,cAAc,MAAM,eAAe,IAAI,eAAe,EAAE;YACvE,UAAU,EAAE,IAAI,UAAU,GAAG;SAChC,CAAC;IACN,CAAC;IAEO,yBAAyB,CAAC,UAAkB,EAAE,UAAkB;QACpE,MAAM,eAAe,GAAG,0BAA0B,CAAC;QACnD,MAAM,gBAAgB,GAAG,cAAc,CAAC;QAExC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,mBAAmB,GAAG,WAAW;iBAClC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;iBAClC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChB,MAAM,UAAU,GAAG;gBACf,cAAc,EAAE,WAAW;gBAC3B,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBACnC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;gBACpD,gBAAgB,EAAE,IAAI;gBACtB,YAAY,EAAE,EAAE;gBAChB,cAAc,EAAE,CAAC,EAAE,CAAC;aACvB,CAAC;YACF,IAAI,UAAU,IAAI,OAAO,EAAE,CAAC;gBACxB,UAAU,CAAC,cAAc,CAAC;oBACtB,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACJ,UAAU,CAAC,gBAAgB,CAAC;oBACxB,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,UAAU,CAAC;QACtB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,oBAAoB,CAAC,MAAW;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QACrC,OAAO,iBAAiB,UAAU,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC;IAC3D,CAAC;IAEO,oBAAoB,CAAC,MAAW;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG;YACZ,gBAAgB,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB;YAC1C,YAAY,EACR,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;SACpE,CAAC;QACF,MAAM,sBAAsB,GACxB,IAAI,CAAC,wCAAwC,CACzC,UAAU,EACV,MAAM,CAAC,KAAK,EACZ,OAAO,CACV,CAAC;QAEN,OAAO,sBAAsB,CAAC;IAClC,CAAC;IAEO,wCAAwC,CAC5C,UAAkB,EAClB,KAAa,EACb,OAAY;QAEZ,MAAM,sBAAsB,GAAG,EAAE,CAAC;QAClC,IAAI,YAAY,GAAG,GAAG,CAAC;QACvB,IAAI,OAAO,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEtC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;oBAC/B,UAAU;wBACN,OAAO,UAAU,IAAI,QAAQ;4BACzB,CAAC,CAAC,IAAI,UAAU,GAAG;4BACnB,CAAC,CAAC,UAAU,CAAC;oBACrB,sBAAsB,CAAC,IAAI,CAAC;wBACxB,QAAQ,EAAE,KAAK,YAAY,OAAO,IAAI,CAAC,kBAAkB,CACrD,UAAU,CACb,GAAG;wBACJ,UAAU,EAAE,IAAI,UAAU,GAAG;wBAC7B,YAAY,EAAE,cAAc;qBAC/B,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,sBAAsB,CAAC,IAAI,CAAC;oBACxB,QAAQ,EAAE,KAAK,YAAY,OAAO,IAAI,CAAC,kBAAkB,CACrD,WAAW,CACd,GAAG;oBACJ,UAAU,EAAE,IAAI,UAAU,GAAG;oBAC7B,YAAY,EAAE,cAAc;iBAC/B,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,sBAAsB,CAAC,IAAI,CAAC;gBACxB,QAAQ,EAAE,KAAK,YAAY,OAAO,KAAK,GAAG;gBAC1C,UAAU,EAAE,IAAI,UAAU,GAAG;gBAC7B,YAAY,EAAE,cAAc;aAC/B,CAAC,CAAC;QACP,CAAC;QACD,OAAO,sBAAsB,CAAC;IAClC,CAAC;IAEO,yBAAyB,CAAC,UAAkB,EAAE,UAAkB;QACpE,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CACnD,UAAU,EACV,UAAU,CACb,CAAC;QACF,IACI,gBAAgB,IAAI,IAAI;YACxB,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,cAAc,CAAC,MAAM,MAAK,CAAC,EAC/C,CAAC;YACC,UAAU,GAAG,UAAU,CAAC,OAAO,CAC3B,gBAAgB,CAAC,cAAc,EAC/B,gBAAgB,CAAC,YAAY,CAChC,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,gBAAgB,CAAC;QAC5B,CAAC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAEO,mCAAmC,CACvC,OAAc,EACd,OAAkC,EAClC,OAAY,EACZ,UAAkB;QAElB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,+BAA+B,CAC9C,MAAM,CAAC,IAAI,EACX,OAAO,CACV,CAAC;YACF,IACI,OAAO,MAAM,CAAC,KAAK,IAAI,QAAQ;gBAC/B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EACtC,CAAC;gBACC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,KAAK;oBACR,IAAI,CAAC,kDAAkD,CACnD,MAAM,CAAC,KAAK,EACZ,OAAO,CACV,CAAC;gBACN,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,yBAAyB,CACzC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,CACd,CAAC;gBACF,MAAM,CAAC,cAAc,GAAG,aAAa,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,gCAAgC,CAChD,MAAM,CAAC,KAAK,EACZ,OAAO,CACV,CAAC;YACN,CAAC;YAED,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;YAC/B,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,kDAAkD,CACtD,KAAa,EACb,OAAY;QAEZ,MAAM,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC;QACxE,MAAM,sBAAsB,GAAG,wBAAwB;YACnD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC;YACvC,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,uBAAuB,GAAG,yBAAyB;YACrD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;YACxC,CAAC,CAAC,EAAE,CAAC;QAET,yBAAyB;QACzB,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,sBAAsB,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;gBAC7C,KAAK,GAAG,KAAK,CAAC,OAAO,CACjB,aAAa,EACb,wBAAwB,CAAC,aAAa,CAAC,CAC1C,CAAC;YACN,CAAC,CAAC,CAAC;QACP,CAAC;QAED,0BAA0B;QAC1B,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,uBAAuB,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;gBAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAC3C,yBAAyB,CAAC,aAAa,CAAC,CAC3C,CAAC;gBACF,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,+BAA+B,CACnC,IAAY,EACZ,OAAkC;QAElC,MAAM,EAAE,wBAAwB,EAAE,GAAG,OAAO,CAAC;QAE7C,IAAI,wBAAwB,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,OAAO,CACzC,CAAC,aAAqB,EAAE,EAAE;gBACtB,MAAM,kBAAkB,GACpB,wBAAwB,CAAC,aAAa,CAAC,CAAC;gBAC5C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;YAC3D,CAAC,CACJ,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,gCAAgC,CACpC,KAAa,EACb,OAAkC;QAElC,MAAM,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC;QAC9C,IAAI,yBAAyB,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;YAChD,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,gCAAgC,CAAC,KAAU;QAC/C,QAAQ,OAAO,KAAK,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACT,OAAO,QAAQ,CAAC;YACpB,KAAK,SAAS;gBACV,OAAO,SAAS,CAAC;YACrB,KAAK,QAAQ,CAAC;YACd;gBACI,OAAO,MAAM,CAAC;QACtB,CAAC;IACL,CAAC;CACJ;AAn7BD,0CAm7BC"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1408,11 +1408,19 @@ var PostgresqlClientService = class extends QueryService {
|
|
|
1408
1408
|
}
|
|
1409
1409
|
} else if (!dynamoFuncName) {
|
|
1410
1410
|
let expValue;
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
let
|
|
1415
|
-
|
|
1411
|
+
let columnName = path;
|
|
1412
|
+
let setObjProperty = false;
|
|
1413
|
+
let column = this.crudSchema.columns[columnName];
|
|
1414
|
+
let columnType = column == null ? void 0 : column.type;
|
|
1415
|
+
if (!columnType) {
|
|
1416
|
+
setObjProperty = true;
|
|
1417
|
+
columnName = "qvAttributes";
|
|
1418
|
+
column = this.crudSchema.columns[columnName];
|
|
1419
|
+
if ((column == null ? void 0 : column.type) == void 0)
|
|
1420
|
+
throw `Column type definition for column: (${path}) must be in the CrudSchema`;
|
|
1421
|
+
columnType = Array.isArray(value) ? "array" : typeof value == "object" ? "object" : "default";
|
|
1422
|
+
}
|
|
1423
|
+
switch (columnType) {
|
|
1416
1424
|
case "object":
|
|
1417
1425
|
{
|
|
1418
1426
|
const valueSerialized = `${JSON.stringify(
|
|
@@ -1422,16 +1430,16 @@ var PostgresqlClientService = class extends QueryService {
|
|
|
1422
1430
|
}
|
|
1423
1431
|
break;
|
|
1424
1432
|
case "array":
|
|
1425
|
-
|
|
1426
|
-
expValue = `ARRAY[${formattedValue}]`;
|
|
1433
|
+
expValue = `ARRAY[${literal(value)}]`;
|
|
1427
1434
|
break;
|
|
1428
1435
|
default:
|
|
1429
|
-
|
|
1430
|
-
expValue = formattedValue;
|
|
1436
|
+
expValue = literal(value);
|
|
1431
1437
|
break;
|
|
1432
1438
|
}
|
|
1433
|
-
|
|
1434
|
-
|
|
1439
|
+
if (setObjProperty) {
|
|
1440
|
+
expValue = `jsonb_set(${ident(columnName)}, '{${path}}', ${expValue}, true)`;
|
|
1441
|
+
}
|
|
1442
|
+
updateClauses.push(`${ident(columnName)} = ${expValue}`);
|
|
1435
1443
|
}
|
|
1436
1444
|
});
|
|
1437
1445
|
this.setCommonColumnsQueryFunctions(
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/constants.ts","../../src/helpers/crudHelpers.ts","../../src/services/cruds/dynamodb/dynamoDbClient.service.ts","../../src/helpers/queryHelpers.ts","../../src/services/cruds/dynamodb/queryBuilderCondition.service.ts","../../src/services/cruds/dynamodb/queryBuilder.service.ts","../../src/helpers/tableHelper.ts","../../src/error/NoRecordsAffectedException.ts","../../src/helpers/errorHelper.ts","../../src/services/cruds/dynamodb/dynamoDbCrud.service.ts","../../src/services/cruds/postgresql/connection.service.ts","../../src/services/cruds/postgresql/query.service.ts","../../src/services/cruds/postgresql/postgreSqlClient.service.ts","../../src/services/cruds/postgresql/postgreSqlCrud.service.ts","../../src/services/crudFactory.service.ts","../../src/services/crud.service.ts","../../src/schemas/crudSchema.ts","../../src/types/filterLogicOperator.type.ts","../../src/types/connectionClosingMode.type.ts","../../src/services/dbPool.service.ts"],"names":["CONNECTION_CLOSING_MODES","FILTER_LOGIC_OPERATORS","_a","_b","isMultiPlatformMode"],"mappings":"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","file":"index.mjs","sourcesContent":["export const FILTER_OPERATOR_MAP: { [key: string]: string } = {\n CONTAINS: 'contains',\n NOT_CONTAINS: 'notContains',\n EQUAL: 'eq',\n STARTS_WITH: 'beginsWith',\n NOT_EQUAL: 'notEq',\n IN: 'in',\n GREATER_THAN: 'gt',\n GT: 'gt',\n GREATER_THAN_EQUAL: 'gte',\n GTE: 'gte',\n LESS_THAN: 'lt',\n LT: 'lt',\n LESS_THAN_EQUAL: 'lte',\n LTE: 'lte',\n EXIST: 'attribute_exists',\n NOT_EXIST: 'attribute_not_exists',\n BETWEEN: 'between',\n};\n\nexport const DYNAMODB_OPERATORS: { [key: string]: string } = {\n EQUAL: 'EQUAL',\n};\n\nexport enum SORT_DIRECTIONS {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\nexport enum CONNECTION_CLOSING_MODES {\n AUTO = 'AUTO',\n MANUAL = 'MANUAL',\n}\n\nexport enum FILTER_LOGIC_OPERATORS {\n AND = 'AND',\n OR = 'OR',\n}\n\nexport enum FilterOperator {\n EQUAL = 'EQUAL',\n NOT_EQUAL = 'NOT_EQUAL',\n CONTAINS = 'CONTAINS',\n GREATER_THAN = 'GREATER_THAN',\n GREATER_THAN_EQUAL = 'GREATER_THAN_EQUAL',\n LESS_THAN = 'LESS_THAN',\n LESS_THAN_EQUAL = 'LESS_THAN_EQUAL',\n IN = 'IN',\n STARTS_WITH = 'STARTS_WITH',\n NOT_CONTAINS = 'NOT_CONTAINS',\n BETWEEN = 'BETWEEN',\n EXIST = 'EXIST',\n NOT_EXIST = 'NOT_EXIST',\n}\n\nexport const POSTGRES_FILTER_OPERATOR_MAP = {\n EQUAL: '=',\n NOT_EQUAL: '<>',\n GREATER_THAN: '>',\n GT: '>',\n GTE: '>=',\n GREATER_THAN_EQUAL: '>=',\n LTE: '<=',\n LESS_THAN_EQUAL: '<=',\n LESS_THAN: '<',\n LT: '<',\n IN: 'IN',\n STARTS_WITH: 'LIKE',\n CONTAINS: 'LIKE',\n NOT_CONTAINS: 'NOT LIKE',\n BETWEEN: 'BETWEEN',\n EXIST: 'IS NOT NULL',\n NOT_EXIST: 'IS NULL',\n};\n\nexport const DEFAULT_PG_SCHEMA = 'public';\n\nexport enum AGGREGATE_FUNCTIONS {\n COUNT = 'COUNT',\n}\n\nexport const DYNAMO_DB_UPDATE_ACTIONS: { [key: string]: string } = {\n SET: 'SET',\n ADD: 'ADD',\n DELETE: 'DELETE',\n REMOVE: 'REMOVE',\n};\n\nexport function isMultiPlatformMode() {\n return process.env.PLATFORM_TYPE?.toLowerCase() === 'container';\n}\n","import { ISorting } from '../interfaces';\nimport { SortDirection } from '../types';\nimport { SORT_DIRECTIONS } from '../utils/constants';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function buildFilter(\n attribute: string,\n value: any,\n operator = 'EQUAL',\n relativePath = undefined,\n) {\n return {\n attribute,\n operator,\n value,\n relativePath,\n };\n}\n\nexport function buildQueryIndex(indexName: string, columns: string[]) {\n return {\n indexName,\n columns,\n };\n}\n\nexport function buildSort(\n column: string,\n direction: string = SORT_DIRECTIONS.ASC,\n): ISorting {\n return {\n column,\n direction: direction as SortDirection,\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport {\n DynamoDBDocumentClient,\n GetCommand,\n QueryCommand,\n PutCommand,\n UpdateCommand,\n DeleteCommand,\n GetCommandInput,\n QueryCommandInput,\n PutCommandInput,\n UpdateCommandInput,\n DeleteCommandInput,\n QueryCommandOutput,\n ScanCommandInput,\n ScanCommand,\n BatchWriteCommandInput,\n BatchWriteCommand,\n} from '@aws-sdk/lib-dynamodb';\nimport { IFilter } from '../../../interfaces';\n\nconst AWS_REGION = process.env.AWS_DEFAULT_REGION;\n\n/**\n * Ref:\n * - https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html\n * - https://www.fernandomc.com/posts/eight-examples-of-fetching-data-from-dynamodb-with-node/\n */\nexport default class DynamoDbClientService {\n private tableName: string;\n protected dynamoDBClient: DynamoDBDocumentClient;\n\n constructor(tableName: string) {\n if (!tableName)\n throw new Error(\n 'The \"tableName\" is required to use a DynamoDbClientService.',\n );\n this.tableName = tableName;\n const client = new DynamoDBClient({ region: AWS_REGION });\n this.dynamoDBClient = DynamoDBDocumentClient.from(client, {\n marshallOptions: {\n removeUndefinedValues: true,\n },\n });\n }\n\n /**\n * Get an item by key\n * @param {Object} keyObject - Ex: { jobId: 1234 }\n * @param {GetCommandInput} options\n */\n public async getByKey(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keyObject: Record<string, any>,\n options: Partial<GetCommandInput> = {},\n ) {\n const params: GetCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ...options,\n };\n const result = await this.dynamoDBClient.send(new GetCommand(params));\n return result.Item;\n }\n\n /**\n * Query a table\n * @param {QueryCommandInput} options\n */\n public async query(\n options: Omit<QueryCommandInput, 'TableName'> = {},\n ): Promise<Omit<QueryCommandOutput, '$metadata'>> {\n const params: QueryCommandInput = {\n TableName: this.tableName,\n ...options,\n };\n const result: Partial<QueryCommandOutput> =\n await this.dynamoDBClient.send(new QueryCommand(params));\n\n if (result.$metadata) delete result.$metadata;\n return result;\n }\n\n /**\n * Scan a table\n * @param {ScanInput} options\n */\n public async scan(\n input: ScanCommandInput,\n ): Promise<Omit<QueryCommandOutput, '$metadata'>> {\n const params: ScanCommandInput = {\n ...input,\n TableName: this.tableName,\n };\n\n const command = new ScanCommand(params);\n const response: Partial<QueryCommandOutput> =\n await this.dynamoDBClient.send(command);\n if (response.$metadata) delete response.$metadata;\n return response;\n }\n\n /**\n * Create/Replace a item object\n * To take care:\n * - https://stackoverflow.com/questions/43667229/difference-between-dynamodb-putitem-vs-updateitem\n * @param {Object} input\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public async put(input: Record<string, any>) {\n const params: PutCommandInput = {\n TableName: this.tableName,\n Item: input,\n ReturnValues: 'NONE',\n };\n return await this.dynamoDBClient.send(new PutCommand(params));\n }\n\n /**\n * Update a item object\n * To take care:\n * - https://stackoverflow.com/questions/43667229/difference-between-dynamodb-putitem-vs-updateitem\n * @param {Object} keyObject - Ex: { jobId: 1234 }\n * @param {UpdateCommandInput} updateObject\n */\n public async update(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keyObject: Record<string, any>,\n options: Partial<UpdateCommandInput> = {},\n ) {\n const params: UpdateCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ReturnValues: 'NONE',\n ...options,\n };\n return await this.dynamoDBClient.send(new UpdateCommand(params));\n }\n\n /**\n * Delete/Remove an item object\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public async remove(keyObject: Record<string, any>) {\n const params: DeleteCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ReturnValues: 'NONE',\n };\n return await this.dynamoDBClient.send(new DeleteCommand(params));\n }\n\n public batchWrittenPut(data: Record<string, any>) {\n const putRequests = data.map((item: any) => ({\n PutRequest: {\n Item: item,\n },\n }));\n const params = {\n RequestItems: {\n [this.tableName]: putRequests,\n },\n } as BatchWriteCommandInput;\n const insertCommand = new BatchWriteCommand(params);\n return this.dynamoDBClient.send(insertCommand);\n }\n\n private buildDeleteRequestKeys(filters: IFilter[]) {\n const deleteRequestKeys: any = {};\n filters.forEach((filter) => {\n deleteRequestKeys[filter.attribute] = filter.value;\n });\n return deleteRequestKeys;\n }\n\n async batchRemove(filterGroups: IFilter[][]): Promise<void> {\n if (!filterGroups?.length) return;\n\n const deleteRequests = filterGroups.map((filterGroup: IFilter[]) => ({\n DeleteRequest: {\n Key: this.buildDeleteRequestKeys(filterGroup),\n },\n }));\n\n const params = {\n RequestItems: {\n [this.tableName]: deleteRequests,\n },\n } as BatchWriteCommandInput;\n\n await this.dynamoDBClient.send(new BatchWriteCommand(params));\n }\n\n public async updateExpressions(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keyObject: Record<string, any>,\n options: Partial<UpdateCommandInput> = {},\n ) {\n const params: UpdateCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ...options,\n };\n\n return await this.dynamoDBClient.send(new UpdateCommand(params));\n }\n}\n","import { AggregateFunction } from '../types';\n\nexport enum METHOD_TO_QUERY {\n where = 'where',\n filter = 'filter',\n update = 'update',\n}\n\nexport function buildAggFunctionAlias(\n aggregateFunction: AggregateFunction,\n): string {\n return `AGG_FN_${aggregateFunction}`;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { QueryCommandInput } from '@aws-sdk/client-dynamodb';\nimport { UpdateCommandInput } from '@aws-sdk/lib-dynamodb';\nimport { IQueryBuilder } from '../../../interfaces/queryBuilder.interface';\nimport { METHOD_TO_QUERY } from '../../../helpers/queryHelpers';\nimport { IQueryBuilderCondition } from '../../../interfaces/queryBuilderCondition.interface';\n\nexport default class QueryBuilderConditionService\n implements IQueryBuilderCondition\n{\n private query;\n private command: Pick<\n QueryCommandInput,\n | 'FilterExpression'\n | 'KeyConditionExpression'\n | 'ExpressionAttributeNames'\n | 'ExpressionAttributeValues'\n > &\n Pick<UpdateCommandInput, 'UpdateExpression'>;\n private queryFrom: METHOD_TO_QUERY | undefined;\n private tempKey: string = '';\n private tempLogicOperator: string | null = null;\n private config: any;\n private wheres: string[] = [];\n private filters: string[] = [];\n private updates: string[] = [];\n private attributeNames: Record<string, string> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private attributeValues: Record<string, any> = {};\n\n constructor(query: IQueryBuilder) {\n this.query = query;\n this.command = {};\n }\n\n public get() {\n this.build();\n return this.command;\n }\n\n public setKey(key: string) {\n this.tempKey = key;\n return this;\n }\n setTmpLogicOp(logicOp: string) {\n this.tempLogicOperator = logicOp;\n return this;\n }\n\n setConfig(config: any) {\n this.config = config;\n return this;\n }\n\n public from(methodName: METHOD_TO_QUERY) {\n this.queryFrom = methodName;\n return this;\n }\n\n eq(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} = ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n notEq(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} <> ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n contains(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `contains(${key}, ${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n notContains(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `NOT contains(${key}, ${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n in(keyValue: any) {\n const keyValues = Array.isArray(keyValue) ? keyValue : [keyValue];\n const { key, value } = this.generateKeyValue(keyValues);\n let expression: any = `${key} IN (${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n beginsWith(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `begins_with(${key}, ${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n project(keyValue: string): string {\n const key = `#${keyValue}`;\n this.attributeNames[key] = keyValue;\n return key;\n }\n\n gt(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} > ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n gte(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} >= ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n lte(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} <= ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n lt(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} < ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n attribute_exists(keyValue: string) {\n const { key } = this.generateKeyValue(keyValue, null, true);\n let expression: any = `attribute_exists(${key})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n attribute_not_exists(keyValue: string) {\n const { key } = this.generateKeyValue(keyValue, null, true);\n let expression: any = `attribute_not_exists(${key})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n between(keyValues: any) {\n const isValidValues =\n Array.isArray(keyValues) && keyValues?.length === 2;\n if (!isValidValues)\n throw new Error(\n 'The value for between filter operator should be an Array with 2 values.',\n );\n\n const { key, value } = this.generateKeyValue(keyValues, ' AND');\n let expression: any = `${key} between ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n private setExpression(expression: string): void {\n switch (this.queryFrom) {\n case METHOD_TO_QUERY.filter:\n this.filters.push(expression);\n break;\n case METHOD_TO_QUERY.update:\n this.updates.push(expression);\n break;\n default:\n this.wheres.push(expression);\n break;\n }\n }\n\n private generateKeyValue(\n value: string[] | string,\n separatorCharacter: string | null = ',',\n omitAttributeValues: boolean = false,\n ): {\n key: string;\n value: string;\n } {\n const keyExpression = `#${this.tempKey}1`;\n\n this.attributeNames[keyExpression] = this.tempKey;\n\n if (Array.isArray(value)) {\n const valueExpressions = value.map((val, index) => {\n let valueExpression = `:${this.tempKey}${index + 1}1`;\n for (const [i] of Object.entries(this.attributeValues)) {\n if (i === valueExpression) valueExpression += '1';\n }\n this.attributeValues[valueExpression] = val;\n return valueExpression;\n });\n return {\n key: keyExpression,\n value: valueExpressions.join(`${separatorCharacter} `),\n };\n } else {\n let valueExpression = `:${this.tempKey}1`;\n if (valueExpression in this.attributeValues) {\n for (const [index] of Object.entries(this.attributeValues)) {\n if (index === valueExpression) valueExpression += '1';\n }\n }\n if (!omitAttributeValues)\n this.attributeValues[valueExpression] = value;\n return { key: keyExpression, value: valueExpression };\n }\n }\n\n private build(): void {\n if (this.wheres.length > 0) {\n const keyConditionExpression = this.wheres.join(' AND ');\n this.command['KeyConditionExpression'] = keyConditionExpression;\n }\n if (this.filters.length > 0) {\n let filterExpression = '';\n\n this.filters?.forEach((filter: any, index) => {\n if (filter?.logicOperator) {\n if (filter?.config?.openExpression) {\n filterExpression = filterExpression.replace(/\\s+(AND|OR)\\s*$/, ` ${filter.config.parentKey} (`);\n if (filterExpression === '') filterExpression += '('\n filterExpression += `${filter.expression} ${filter.logicOperator} `;\n } else if (filter?.config?.closeExpression) {\n filterExpression += `${filter.expression}) ${filter.config.parentKey} `; \n } else {\n filterExpression += `${filter.expression} ${filter.logicOperator} `;\n }\n }\n });\n filterExpression = filterExpression.replace(/\\s+(AND|OR)\\s*$/, '');\n this.command['FilterExpression'] = filterExpression;\n }\n if (this.updates.length > 0) {\n const filterExpression = this.updates.join(', ');\n this.command['UpdateExpression'] = `SET ${filterExpression}`;\n }\n if (Object.values(this.attributeNames).length > 0)\n this.command['ExpressionAttributeNames'] = this.attributeNames;\n\n if (Object.values(this.attributeValues).length > 0)\n this.command['ExpressionAttributeValues'] = this.attributeValues;\n }\n}\n","import { QueryCommandInput, ScanCommandInput } from '@aws-sdk/client-dynamodb';\nimport { IQueryBuilderCondition } from '../../../interfaces/queryBuilderCondition.interface';\nimport QueryBuilderConditionService from './queryBuilderCondition.service';\nimport { METHOD_TO_QUERY } from '../../../helpers/queryHelpers';\nimport { IQueryBuilder } from '../../../interfaces/queryBuilder.interface';\nimport { AGGREGATE_FUNCTIONS } from '../../../utils/constants';\n\nexport default class QueryBuilderService implements IQueryBuilder {\n private command: Omit<QueryCommandInput & ScanCommandInput, 'TableName'>;\n private condition: IQueryBuilderCondition;\n\n constructor(private useScan = false) {\n this.command = {};\n\n this.condition = new QueryBuilderConditionService(this);\n }\n\n get() {\n const condition = this.condition.get();\n return { ...this.command, ...condition };\n }\n\n limit(num: number): IQueryBuilder {\n this.command.Limit = num;\n return this;\n }\n\n usingIndex(indexName: string): IQueryBuilder {\n this.command.IndexName = indexName;\n return this;\n }\n\n ascending(): IQueryBuilder {\n if (!this.useScan) this.command.ScanIndexForward = true;\n return this;\n }\n\n descending(): IQueryBuilder {\n if (!this.useScan) this.command.ScanIndexForward = false;\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n startKey(lastEvaluatedKey: Record<string, any>): IQueryBuilder {\n this.command.ExclusiveStartKey = lastEvaluatedKey;\n return this;\n }\n\n projection(fields: string[] = []) {\n if (!fields.length) return this;\n\n const expression: string[] = [];\n fields.forEach((field) => {\n const key = this.condition.project(field);\n expression.push(key);\n });\n this.command.ProjectionExpression = expression.join(',');\n return this;\n }\n\n where(keyName: string): IQueryBuilderCondition {\n this.condition\n .setKey(keyName)\n .setTmpLogicOp(null)\n .from(METHOD_TO_QUERY.where);\n return this.condition;\n }\n\n filter(\n keyName: string,\n logicOperator: string = 'AND',\n config?: any\n ): IQueryBuilderCondition {\n this.condition\n .setKey(keyName)\n .setTmpLogicOp(logicOperator)\n .setConfig(config)\n .from(METHOD_TO_QUERY.filter);\n return this.condition;\n }\n\n update(attribute: Record<string, string>): IQueryBuilder {\n for (const [key, value] of Object.entries(attribute)) {\n this.condition.setKey(key).from(METHOD_TO_QUERY.update);\n this.condition.eq(value);\n }\n return this;\n }\n\n consistentRead(consistentRead: boolean): IQueryBuilder {\n this.command.ConsistentRead = consistentRead;\n return this;\n }\n\n count(): IQueryBuilder {\n this.command.Select = AGGREGATE_FUNCTIONS.COUNT;\n return this;\n }\n}\n","import { ITableColumns, ITableName } from '../interfaces';\n\nexport function getTableColumnNames(columns: ITableColumns): string[] {\n return Object.keys(columns);\n}\n\nexport function findIdColumnName(columns: ITableColumns): string | undefined {\n return getTableColumnNames(columns).find(\n (columnName) => columns[columnName].columnId === true,\n );\n}\n\nexport function getTableName(\n table: string | ITableName,\n property = 'name',\n): string {\n if (!table) throw new Error('missing table property');\n\n if (typeof table === 'string') return table;\n\n const { name, alias } = table;\n return property === 'alias' && alias ? alias : name;\n}\n\nexport function getPrimaryKeyColumns(columns: ITableColumns): string[] {\n return getTableColumnNames(columns).filter(\n (columnName) => columns[columnName].primary === true,\n );\n}\n","export class NoRecordsAffectedException extends Error {\n constructor() {\n super('No records affected by update');\n this.name = 'NoRecordsAffectedException';\n }\n}\n","import { NoRecordsAffectedException } from '../error/NoRecordsAffectedException';\n\nexport function PersistenceErrorWrapper(queryResult: any) {\n const dynamoNoRecordsAffectedExceptions = [\n 'ConditionalCheckFailedException',\n ];\n\n if (queryResult instanceof Error) {\n //Checks for dynamodb errors also the ones that is included in NoRecordsAffectedExceptions list\n if (\n queryResult.name &&\n dynamoNoRecordsAffectedExceptions.includes(queryResult.name)\n ) {\n throw new NoRecordsAffectedException();\n } else {\n throw queryResult;\n }\n } else {\n //This is for Postgres scenario, where there is not error launched by updates\n if (queryResult.rowCount === 0) {\n throw new NoRecordsAffectedException();\n }\n }\n\n return queryResult;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport DynamoDbClientService from './dynamoDbClient.service';\nimport QueryBuilderService from './queryBuilder.service';\n\nimport {\n AGGREGATE_FUNCTIONS,\n DYNAMODB_OPERATORS,\n FILTER_OPERATOR_MAP,\n DYNAMO_DB_UPDATE_ACTIONS,\n} from '../../../utils/constants';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n ICrudService,\n IFilter,\n IFindOptions,\n IFindPagination,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n IUpdateOptions,\n} from '../../../interfaces';\nimport { CrudSchema } from '../../../schemas/crudSchema';\nimport {\n findIdColumnName,\n getPrimaryKeyColumns,\n getTableName,\n} from '../../../helpers/tableHelper';\nimport { PersistenceErrorWrapper } from '../../../helpers/errorHelper';\nimport {\n QueryCommandInput,\n QueryCommandOutput,\n ScanCommandInput,\n} from '@aws-sdk/lib-dynamodb';\n\nexport class DynamoDbCrudService<T> implements ICrudService<T> {\n private dynamoDbClientService: DynamoDbClientService;\n\n constructor(private tableSchema: typeof CrudSchema) {\n this.dynamoDbClientService = new DynamoDbClientService(this.tableName);\n }\n\n private get tableName(): string {\n return getTableName(this.tableSchema.table);\n }\n\n private get idColumnName(): string | undefined {\n return findIdColumnName(this.tableSchema.columns);\n }\n\n private get defaultPrimaryKeys(): string[] {\n return getPrimaryKeyColumns(this.tableSchema.columns);\n }\n\n async create(data: T | T[]): Promise<T | ICreateMultipleResponse> {\n if (Array.isArray(data)) {\n const response =\n await this.dynamoDbClientService.batchWrittenPut(data);\n return {\n unprocessedItems: response.UnprocessedItems ?? [],\n };\n } else {\n await this.dynamoDbClientService.put(data as Record<string, any>);\n return data as T;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\n runQuery(queryCommand: any): Promise<any> {\n throw new Error('Method not implemented.');\n }\n\n find(options: IFindOptions = {}): Promise<any> {\n const query = new QueryBuilderService(options.useScan);\n\n if (options.index?.indexName)\n query.usingIndex(options.index?.indexName);\n\n this.applySorting(query, options.sorting, options.index?.indexName);\n this.applyPagination(query, options.pagination);\n\n if (options.consistentRead)\n query.consistentRead(options.consistentRead);\n\n if (options.fields) query.projection(options.fields);\n\n this.applyFilters(query, options);\n\n if (options.aggregateFunction === AGGREGATE_FUNCTIONS.COUNT)\n query.count();\n\n return this.fetchResults(\n query.get(),\n options.pagination?.limit,\n options.useScan,\n ).then((res: any) => {\n const pagination: IFindPagination = {};\n if (res.lastEvaluatedKey) pagination.from = res.lastEvaluatedKey;\n if (options.pagination?.limit)\n pagination.limit = options.pagination?.limit;\n return {\n items: res.items,\n pagination,\n count: res.count,\n };\n });\n }\n\n async fetchResults(\n command: ScanCommandInput | QueryCommandInput,\n limit: number = 100,\n useScan: boolean = false,\n ): Promise<unknown> {\n let results: unknown[] = [];\n let lastEvaluatedKey: Record<string, unknown> = {};\n let rowsCount = 0;\n\n do {\n const result = await this.fetchBatch(\n command,\n useScan,\n lastEvaluatedKey,\n );\n const rows = result.Items ?? [];\n results = results.concat(rows);\n lastEvaluatedKey = result.LastEvaluatedKey ?? {};\n rowsCount += result.Count || rows.length;\n } while (rowsCount < limit && this.isNotEmptyObject(lastEvaluatedKey));\n\n const encryptedLastEvaluatedKey = this.isNotEmptyObject(\n lastEvaluatedKey,\n )\n ? this.encryptPaginationKey(lastEvaluatedKey)\n : null;\n return {\n items: results,\n lastEvaluatedKey: encryptedLastEvaluatedKey,\n count: rowsCount,\n };\n }\n\n async fetchBatch(\n command: ScanCommandInput | QueryCommandInput,\n useScan: boolean,\n lastEvaluatedKey: Record<string, unknown>,\n ): Promise<Partial<QueryCommandOutput>> {\n if (this.isNotEmptyObject(lastEvaluatedKey))\n command.ExclusiveStartKey = lastEvaluatedKey;\n\n const result = await (useScan\n ? this.dynamoDbClientService.scan(command)\n : this.dynamoDbClientService.query(command));\n\n if (command.Select !== AGGREGATE_FUNCTIONS.COUNT) {\n command.Limit = (command.Limit ?? 0) - (result.Items?.length ?? 0);\n }\n\n return result;\n }\n\n applyPagination(\n query: QueryBuilderService,\n pagination: IFindPagination | undefined,\n ) {\n if (pagination?.limit) query.limit(pagination.limit);\n if (pagination?.from)\n query.startKey(this.decryptPaginationKey(pagination.from));\n }\n\n async findAll(\n options: IFindOptions = {},\n allResults: any[] = [],\n rowsCount: number = 0,\n ): Promise<any> {\n const { items, pagination, count } = await this.find(options);\n allResults.push(...items);\n rowsCount += count;\n\n if (pagination?.from)\n await this.findAll({ ...options, pagination }, allResults);\n\n return {\n items: allResults,\n pagination: null,\n count: rowsCount,\n };\n }\n\n async findCount(options: IFindOptions = {}): Promise<number> {\n const findOptions = {\n ...options,\n aggregateFunction: AGGREGATE_FUNCTIONS.COUNT,\n };\n if (options.pagination?.from) {\n return this.find(findOptions).then((res) => res.count);\n } else {\n return this.findAll(findOptions).then((res) => res.count);\n }\n }\n\n buildFindItemQuery(options: IFindOptions): QueryBuilderService {\n const query = new QueryBuilderService();\n\n if (options.index?.indexName) query.usingIndex(options.index.indexName);\n\n this.applyFilters(query, options);\n query.projection(options.fields);\n query.limit(1);\n\n return query;\n }\n\n findItem(options: IFindOptions): Promise<T | null> {\n const query = this.buildFindItemQuery(options);\n return this.dynamoDbClientService.query(query.get()).then((result) => {\n if (result.Items?.length) return result.Items[0] as T;\n if (options.throwErrorIfNull) throw new Error('NOT_FOUND');\n return null;\n });\n }\n\n applyWhereFilter(query: QueryBuilderService, filter: IFilter) {\n const operator =\n FILTER_OPERATOR_MAP[\n filter.operator?.toUpperCase() ?? DYNAMODB_OPERATORS.EQUAL\n ];\n (query.where(filter.attribute) as any)[operator](filter.value);\n }\n\n applyFilterFilter(\n query: QueryBuilderService,\n filter: IFilter,\n logicOperator: string = 'AND',\n config?: any,\n ) {\n const operator =\n FILTER_OPERATOR_MAP[\n filter.operator?.toUpperCase() ?? DYNAMODB_OPERATORS.EQUAL\n ];\n (query.filter(filter.attribute, logicOperator, config) as any)[\n operator\n ](filter.value);\n }\n\n applyFilters(query: QueryBuilderService, options: IFindOptions) {\n if (Array.isArray(options.filters)) {\n this.applySimpleFilters(query, options);\n } else {\n this.applyCompoundFilters(query, options);\n }\n }\n\n applySimpleFilters(query: QueryBuilderService, options: IFindOptions) {\n const queryIndexColumns = options.index?.columns ?? [];\n const defaultWhereProperties = this.defaultPrimaryKeys;\n\n const whereProperties: string[] = queryIndexColumns?.length\n ? queryIndexColumns\n : defaultWhereProperties;\n const filters = options.filters as IFilter[];\n filters.forEach((filter: IFilter) => {\n const isWhereProperty = whereProperties.includes(filter.attribute);\n isWhereProperty && !options.useScan\n ? this.applyWhereFilter(query, filter)\n : this.applyFilterFilter(query, filter);\n });\n }\n\n applyCompoundFilters(query: QueryBuilderService, options: IFindOptions) {\n if (!options.filters) return;\n this.buildFilterExpression(query, options);\n }\n\n buildFilterExpression(\n query: QueryBuilderService,\n options: IFindOptions,\n parentKey?: string,\n ) {\n const compositeFilters = options.filters as ICompositeFilter;\n const queryIndexColumns = options.index?.columns || [];\n const defaultWhereProperties = this.defaultPrimaryKeys;\n\n const whereProperties = queryIndexColumns?.length\n ? queryIndexColumns\n : defaultWhereProperties;\n\n for (const [key, value] of Object.entries(compositeFilters)) {\n value.forEach(\n (filter: IFilter | ICompositeFilter, index: number) => {\n const isCompositeFilter = 'OR' in filter || 'AND' in filter;\n if (isCompositeFilter) {\n const newOptions = {\n ...options,\n filters: filter,\n };\n this.buildFilterExpression(query, newOptions, key);\n } else {\n const simpleFilter = filter as IFilter;\n const isWhereProperty = whereProperties.includes(\n simpleFilter.attribute,\n );\n let config;\n if (parentKey) {\n config = {\n parentKey,\n openExpression: index === 0,\n closeExpression: index === value.length - 1,\n };\n }\n\n isWhereProperty && !options.useScan\n ? this.applyWhereFilter(query, simpleFilter)\n : this.applyFilterFilter(\n query,\n simpleFilter,\n key,\n config,\n );\n }\n },\n );\n }\n }\n\n applySorting(query: QueryBuilderService, sorting: any, sortIndex?: string) {\n if (sorting?.length) {\n if (sortIndex) query.usingIndex(sortIndex);\n if (sorting[0].direction === 'DESC') {\n query.descending();\n } else {\n query.ascending();\n }\n }\n }\n\n isNotEmptyObject(obj: unknown) {\n return (\n obj !== null &&\n typeof obj === 'object' &&\n Object.keys(obj).length > 0\n );\n }\n\n encryptPaginationKey(key: Record<string, any>): string {\n const jsonKey = JSON.stringify(key);\n return Buffer.from(jsonKey).toString('base64');\n }\n\n decryptPaginationKey(encodedKey: string): Record<string, any> {\n const decodedKey = Buffer.from(encodedKey, 'base64').toString('utf-8');\n return JSON.parse(decodedKey);\n }\n\n async update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n options?: IUpdateOptions,\n ): Promise<any> {\n const savedRecord = options?.skipFindItems\n ? {}\n : await this.findItem({\n filters: filters as IFilter[],\n });\n\n const newData: any = {\n ...savedRecord,\n ...data,\n };\n\n await this.dynamoDbClientService.put(newData);\n\n if (options?.returnRowsAffected) {\n return 1;\n }\n\n return newData;\n }\n\n async upsert(\n keyColumnNames: string[],\n data: T\n ): Promise<T | null> {\n const filters = [] as IFilter[];\n\n keyColumnNames.map(key => {\n filters.push({ attribute: key, value: (data as any)[key], operator: 'EQUAL' });\n });\n\n const savedRecord = await this.findItem({\n filters: filters as IFilter[],\n });\n\n const newData: any = {\n ...savedRecord,\n ...data,\n };\n\n await this.dynamoDbClientService.put(newData);\n return newData;\n }\n\n async remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions,\n ) {\n if (options?.filterGroups) {\n await this.dynamoDbClientService.batchRemove(\n filters as IFilter[][],\n );\n } else {\n const key = (filters as IFilter[]).reduce((obj: any, item: any) => {\n const property = item.attribute;\n obj[property] = item.value;\n return obj;\n }, {});\n await this.dynamoDbClientService.remove(key);\n }\n }\n\n async updateExpressions(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: IUpdateExpressionsOptions,\n ): Promise<any> {\n try {\n return await this.#prepareAndExecuteUpdateExpression(\n filters,\n actions,\n options,\n );\n } catch (error: any) {\n PersistenceErrorWrapper(error);\n }\n }\n\n async #prepareAndExecuteUpdateExpression(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: IUpdateExpressionsOptions,\n ) {\n const queryObject = this.#buildUpdateExpressionQuery({ filters }).get();\n const primaryKeys = this.defaultPrimaryKeys;\n\n const keyObject: any = this.#getKeyObjectForUpdateExpression(\n queryObject,\n primaryKeys,\n );\n\n const updateExpressions: any = [];\n\n Object.keys(actions).forEach((action: string) => {\n const actionUpdateExpression =\n this.#extractUpdateExpressionAttributesAndNames(\n actions,\n action,\n );\n updateExpressions.push(actionUpdateExpression);\n });\n\n const dbParams = {\n UpdateExpression: updateExpressions.join(' '),\n ...this.#getUpdateExpressionOptions(options),\n };\n\n const { ExpressionAttributeValues, ExpressionAttributeNames } =\n queryObject;\n if (Object.keys(ExpressionAttributeValues).length > 0) {\n dbParams['ExpressionAttributeValues'] = {\n ...ExpressionAttributeValues,\n ...dbParams.ExpressionAttributeValues,\n };\n }\n\n if (Object.keys(ExpressionAttributeNames).length > 0) {\n dbParams['ExpressionAttributeNames'] = {\n ...ExpressionAttributeNames,\n ...dbParams.ExpressionAttributeNames,\n };\n }\n if (queryObject.FilterExpression)\n dbParams['ConditionExpression'] = queryObject.FilterExpression;\n\n return this.dynamoDbClientService.updateExpressions(\n keyObject,\n dbParams,\n );\n }\n\n #buildUpdateExpressionQuery(options: IFindOptions): QueryBuilderService {\n const query = new QueryBuilderService();\n\n if (options.index?.indexName) query.usingIndex(options.index.indexName);\n this.applyFilters(query, options);\n\n return query;\n }\n\n #getKeyObjectForUpdateExpression(queryObject: any, primaryKeys: any) {\n const keyObject: any = {};\n\n Object.keys(queryObject.ExpressionAttributeNames).forEach(\n (attribute) => {\n const sanitizedAttribute = attribute\n .replace('#', '')\n .replace('1', '');\n if (primaryKeys.includes(sanitizedAttribute)) {\n const valueName = `:${sanitizedAttribute}1`;\n keyObject[sanitizedAttribute] =\n queryObject.ExpressionAttributeValues[valueName];\n delete queryObject.ExpressionAttributeValues[valueName];\n delete queryObject.ExpressionAttributeNames[attribute];\n }\n },\n );\n\n return keyObject;\n }\n\n #getUpdateExpressionOptions(options: IUpdateExpressionsOptions) {\n const updateExprOptions: any = {\n ReturnValues: options.returnValues,\n };\n\n if (options.expressionAttributeNames)\n updateExprOptions.ExpressionAttributeNames =\n options.expressionAttributeNames;\n if (options.expressionAttributeValues)\n updateExprOptions.ExpressionAttributeValues =\n options.expressionAttributeValues;\n\n return updateExprOptions;\n }\n\n #extractUpdateExpressionAttributesAndNames(\n actions: any,\n actionType: string,\n ) {\n const actionUpdateExpressions: any = [];\n\n actions[actionType].forEach((action: any) => {\n switch (actionType) {\n case DYNAMO_DB_UPDATE_ACTIONS.DELETE:\n case DYNAMO_DB_UPDATE_ACTIONS.REMOVE:\n actionUpdateExpressions.push(`${action.path}`);\n break;\n\n case DYNAMO_DB_UPDATE_ACTIONS.ADD:\n case DYNAMO_DB_UPDATE_ACTIONS.SET:\n {\n let operator = '';\n if (actionType == DYNAMO_DB_UPDATE_ACTIONS.SET)\n operator = '=';\n actionUpdateExpressions.push(\n `${action.path} ${operator}${action.value}`,\n );\n }\n break;\n }\n });\n\n const actionUpdateExpression = `${actionType} ${actionUpdateExpressions.join(\n ', ',\n )}`;\n\n return actionUpdateExpression;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n runRawQuery(query: string, params: any[]): Promise<any> {\n throw new Error('Method not implemented.');\n }\n}\n","import { Client } from 'pg';\n\nexport default class ConnectionService {\n get connectionString() {\n const connectionString =\n process.env.MULTIPLATFORM_PG_CONNECTION_STRING || '';\n if (!connectionString) {\n throw new Error(\n 'MULTIPLATFORM_PG_CONNECTION_STRING environment variable must be configured',\n );\n }\n return connectionString;\n }\n\n async getClient(): Promise<Client> {\n const client: Client = new Client({\n connectionString: this.connectionString,\n });\n await client.connect();\n return client;\n }\n\n releaseClient(client: Client): void {\n try {\n client.end();\n } catch {\n // eslint-disable-next-line no-console\n console.log('Error releasing client');\n }\n }\n}\n","/* eslint-disable no-console */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Client, PoolClient, QueryResult } from 'pg';\nimport ConnectionService from './connection.service';\nimport { DbPool } from '../../../types';\n\nexport default class QueryService {\n private connectionService: ConnectionService;\n\n constructor(private pool?: DbPool) {\n this.connectionService = new ConnectionService();\n }\n\n async runQuery(\n queryText: string,\n values?: any[],\n ): Promise<QueryResult<any>> {\n const client: PoolClient | Client | any = await (this.pool\n ? this.pool.connect()\n : this.connectionService.getClient());\n\n try {\n if (process.env.NODE_ENV === 'development')\n console.info('[data-persistence] Query as Text:', queryText);\n const result = await client.query(queryText, values);\n return result;\n } finally {\n if (this.pool) {\n await client.release();\n } else {\n this.connectionService.releaseClient(client as Client);\n }\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-console */\n\nimport { ident, literal, format } from '@scaleleap/pg-format';\nimport { QueryResult } from 'pg';\nimport { AggregateFunction, DbPool, FilterLogicOperator } from '../../../types';\nimport {\n ICompositeFilter,\n IFilter,\n IFindOptions,\n IFindPagination,\n ISorting,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n} from '../../../interfaces';\nimport QueryService from './query.service';\nimport {\n FILTER_LOGIC_OPERATORS,\n SORT_DIRECTIONS,\n POSTGRES_FILTER_OPERATOR_MAP,\n DEFAULT_PG_SCHEMA,\n FilterOperator,\n DYNAMO_DB_UPDATE_ACTIONS,\n} from '../../../utils/constants';\nimport { CrudSchema } from '../../../schemas';\nimport { getTableName } from '../../../helpers/tableHelper';\nimport { buildAggFunctionAlias } from '../../../helpers/queryHelpers';\nimport { IFindRawWith } from '../../../interfaces/findRawWith.interface';\n\nexport default class PostgresqlClientService<T> extends QueryService {\n private crudSchema: typeof CrudSchema;\n constructor(tableSchema: typeof CrudSchema, poolClient?: DbPool) {\n super(poolClient);\n this.crudSchema = tableSchema;\n }\n\n get dbSchema() {\n return this.crudSchema.schema || DEFAULT_PG_SCHEMA;\n }\n\n get tableName() {\n return (\n getTableName(this.crudSchema.table, 'alias') ||\n getTableName(this.crudSchema.table)\n );\n }\n\n get isTemporalTable() {\n return this.crudSchema?.isTemporalTable;\n }\n\n getWildcardValue(operator: FilterOperator, value: string): string {\n if (\n operator === FilterOperator.CONTAINS ||\n operator === FilterOperator.NOT_CONTAINS\n ) {\n return '%' + value + '%';\n } else if (operator === FilterOperator.STARTS_WITH) {\n return value + '%';\n } else {\n return value;\n }\n }\n\n private buildClause(\n operator: FilterOperator,\n attribute: string,\n relativePath: string | undefined,\n value: any,\n ): string {\n const formattedValue = literal(value);\n operator = operator\n ? (operator.toUpperCase() as FilterOperator)\n : FilterOperator.EQUAL;\n const postgresOperator = POSTGRES_FILTER_OPERATOR_MAP[operator];\n\n if (!postgresOperator)\n throw new Error(`Unsupported filter operator: ${operator}`);\n\n let property;\n const filterProperty = ident(attribute);\n const columnExists = !!this.crudSchema.columns[attribute];\n const columnType =\n columnExists && this.crudSchema.columns[attribute]?.type;\n\n if (relativePath != undefined) {\n const attributePath = relativePath.split('.').join(',');\n\n property = `(\"${attribute}\" #> '{${attributePath}}')`;\n if (value != null) {\n const comparisonValueType =\n this.getValueTypeAsPostgresDefinition(value);\n property += `::${comparisonValueType}`;\n }\n } else {\n property = columnExists\n ? filterProperty\n : `(\"qvAttributes\" ->> '${attribute}')`;\n }\n\n if (operator === FilterOperator.IN) {\n const formattedValues = Array.isArray(value)\n ? value.map(literal)\n : [formattedValue];\n return `${property} ${postgresOperator} (${formattedValues.join(\n ', ',\n )})`;\n }\n\n if (operator === FilterOperator.BETWEEN) {\n return `${property} ${postgresOperator} ${value[0]} AND ${value[1]}`;\n }\n\n /**\n * ? Additional filter to avoid error when column accepts null values.\n */\n if (operator === FilterOperator.NOT_EQUAL && value !== null) {\n return `(${property} ${postgresOperator} ${literal(\n value,\n )} OR ${property} IS NULL)`;\n }\n\n if (\n operator === FilterOperator.NOT_EXIST ||\n operator === FilterOperator.EXIST\n ) {\n return `${property} ${postgresOperator}`;\n }\n\n if (\n (operator === FilterOperator.CONTAINS ||\n operator === FilterOperator.NOT_CONTAINS) &&\n columnType === 'array'\n ) {\n const filterValue =\n typeof value === 'number' ? value : `'${value}'`;\n let filterString = `${filterValue} = ANY(${property})`;\n\n if (operator === FilterOperator.NOT_CONTAINS) {\n if (value === null) {\n filterString = `(NOT (${filterString}))`;\n } else {\n filterString = `(NOT (${filterString}) or ${property} IS NULL)`;\n }\n }\n return filterString;\n }\n\n const wildcardValue = this.getWildcardValue(operator, value);\n return `${property} ${postgresOperator} ${literal(wildcardValue)}`;\n }\n\n private buildFilterClause(\n filters: IFilter[] | ICompositeFilter,\n logicOperator?: FilterLogicOperator,\n ): string {\n if (Array.isArray(filters)) {\n const filterClauses = filters.map((filter) => {\n return this.buildClause(\n filter.operator as FilterOperator,\n filter.attribute,\n filter.relativePath,\n filter.value,\n );\n });\n return filterClauses.join(\n ` ${logicOperator ?? FILTER_LOGIC_OPERATORS.AND} `,\n );\n } else {\n return this.buildQueryByClause(filters);\n }\n }\n\n private isCompositeFilter = function (value: any) {\n return 'OR' in value || 'AND' in value;\n };\n\n buildQueryByClause(filters: IFilter[] | ICompositeFilter): string {\n let filterClauses: string = '';\n let isFirstFilter = true;\n\n for (const [key, value] of Object.entries(filters)) {\n if (!isFirstFilter) {\n filterClauses += key === 'AND' ? ' AND ' : ' OR ';\n }\n\n if (this.isCompositeFilter(value)) {\n filterClauses += '(';\n filterClauses += this.buildQueryByClause(\n value as ICompositeFilter,\n );\n filterClauses += ')';\n } else {\n (value as IFilter[]).forEach((filter: IFilter) => {\n let clause = '';\n if (this.isCompositeFilter(filter)) {\n clause = `(${this.buildQueryByClause(\n filter as ICompositeFilter,\n )})`;\n } else {\n clause = this.buildClause(\n filter.operator as FilterOperator,\n filter.attribute,\n filter.relativePath,\n filter.value,\n );\n }\n filterClauses += `${clause} ${key} `;\n });\n }\n\n isFirstFilter = false;\n }\n\n filterClauses = filterClauses.replace(/\\s+(AND|OR)\\s*$/, '');\n return filterClauses;\n }\n\n private formatOrderByItem(sort: ISorting): string {\n return `${ident(sort.column)} ${sort.direction || SORT_DIRECTIONS.ASC}`;\n }\n\n private buildOrderByClause(querySorting: ISorting[]): string {\n try {\n return querySorting.map(this.formatOrderByItem).join(', ');\n } catch (error) {\n return '';\n }\n }\n\n formatArray(array: any[]) {\n const isNumberArray = typeof array[0] === 'number';\n if (isNumberArray) {\n return `{${array.join(',')}}`;\n } else {\n return `{${array.map((val) => `\"${val}\"`).join(',')}}`;\n }\n }\n\n formatValue(value: any) {\n if (Array.isArray(value)) {\n if (!value?.length) return '{}';\n const isNumberArray = typeof value[0] === 'number';\n if (isNumberArray) {\n return `{${value.join(',')}}`;\n } else {\n return `{${value.map((val: any) => `\"${val}\"`).join(',')}}`;\n }\n }\n return value;\n }\n\n async createCommand(data: any[]): Promise<any> {\n const keys = Object.keys(data[0]); // Assuming all objects have the same keys\n const values = data.map((item) =>\n keys.map((key) => this.formatValue(item[key])),\n );\n\n const query = format(\n `INSERT INTO ${ident(this.dbSchema)}.${ident(\n this.tableName,\n )} (%I) VALUES %L RETURNING *;`,\n keys,\n values,\n );\n\n return this.runQuery(query);\n }\n\n private isValidFiltersInput(\n filters: IFilter[] | ICompositeFilter,\n ): boolean {\n const isValidArrayFilters =\n Array.isArray(filters) && filters?.length > 0;\n const isValidCompositeFilters = this.isCompositeFilter(filters);\n return isValidArrayFilters || isValidCompositeFilters;\n }\n\n private replaceFilterTokensInQuery(\n query: string,\n filters?: IFilter[] | ICompositeFilter,\n ) {\n if (!filters) return query;\n\n if (this.isValidFiltersInput(filters)) {\n const filterClause = this.buildFilterClause(filters);\n return query.replace(/{{filters}}/g, filterClause);\n }\n }\n\n private addFiltersToQuery(\n query: string,\n filters?: IFilter[] | ICompositeFilter,\n ): string {\n if (!filters) return query;\n\n if (this.isValidFiltersInput(filters))\n query += ` WHERE ${this.buildFilterClause(filters)}`;\n return query;\n }\n\n addOrderByToQuery(query: string, orderBy?: ISorting[]): string {\n if (orderBy) query += ` ORDER BY ${this.buildOrderByClause(orderBy)}`;\n return query;\n }\n\n private addPaginationToQuery(\n query: string,\n pagination?: IFindPagination,\n ): string {\n if (pagination) {\n const { limit, from } = pagination;\n if (limit) query += ` LIMIT ${limit}`;\n if (from) query += ` OFFSET ${from}`;\n }\n return query;\n }\n\n private getSelectClause(\n aggregateFunction: AggregateFunction | undefined,\n fields: string[] = [],\n ) {\n if (aggregateFunction)\n return `CAST(${aggregateFunction}(1) AS INTEGER) AS \"${buildAggFunctionAlias(\n aggregateFunction,\n )}\"`;\n if (!fields?.length) return '*';\n\n return this.parseFields(fields).join(', ');\n }\n\n private parseFields(fields: String[]): String[] {\n const columnsFromSchema: String[] = Object.keys(\n this.crudSchema.columns,\n );\n const attributes: String[] = fields\n .filter((field) => columnsFromSchema.indexOf(field) !== -1)\n .map((field) => `\"${field}\"`);\n\n fields\n .filter((field) => columnsFromSchema.indexOf(field) === -1)\n .forEach((field) => {\n attributes.push(`\"qvAttributes\" ->> '${field}' as \"${field}\"`);\n });\n return attributes;\n }\n\n private resolveWithQueries(rawWith: IFindRawWith[]): string[] {\n const withQueries = rawWith.map(({ alias, query, filters }) => {\n const withQuery = this.replaceFilterTokensInQuery(query, filters);\n return `${alias} AS (${withQuery})`;\n });\n return withQueries;\n }\n\n getRawWithClause(rawWith?: IFindRawWith[]): string {\n let rawWithClause = '';\n if (rawWith?.length) {\n const withQueries = this.resolveWithQueries(rawWith);\n rawWithClause = 'WITH ' + withQueries.join(',\\n');\n }\n return rawWithClause;\n }\n\n getQueryFrom() {\n return this.isTemporalTable\n ? ident(this.tableName)\n : `${ident(this.dbSchema)}.${ident(this.tableName)}`;\n }\n\n async findCommand(options: IFindOptions = {}): Promise<T[]> {\n const rawWithClause = this.getRawWithClause(options.rawWith);\n let query = `SELECT ${this.getSelectClause(\n options.aggregateFunction,\n options.fields,\n )} FROM ${this.getQueryFrom()}`;\n query = this.addFiltersToQuery(query, options.filters);\n if (!options.aggregateFunction) {\n query = this.addOrderByToQuery(query, options.sorting);\n query = this.addPaginationToQuery(query, options.pagination);\n }\n if (rawWithClause) {\n query = `${rawWithClause} ${query}`;\n }\n return (await this.runQuery(query)).rows;\n }\n\n sanitizeValue(value: any): string {\n if (Array.isArray(value)) {\n if (value.length === 0) '[]';\n const formattedArray = value\n .map((item) => {\n if (typeof item === 'string') {\n return `'${item}'`;\n } else if (typeof item === 'object') {\n return JSON.stringify(item);\n } else {\n return item;\n }\n })\n .join(',');\n\n return JSON.stringify(formattedArray);\n } else {\n return literal(value);\n }\n }\n\n async updateCommand(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<any>,\n ): Promise<QueryResult<any>> {\n let query = `UPDATE ${ident(this.dbSchema)}.${ident(\n this.tableName,\n )} SET`;\n\n const updateClauses = Object.entries(data).map(([key, value]) => {\n const dbValue = literal(this.formatValue(value));\n return `${ident(key)} = ${dbValue}`;\n });\n query += ` ${updateClauses.join(', ')}`;\n\n query += ' WHERE ';\n query += this.buildFilterClause(filters);\n\n return this.runQuery(query);\n }\n\n async upsertCommand(\n keyColumnNames: string[],\n data: T\n ): Promise<any> {\n const updateClauses = (keyColumnNames?.length &&\n Object.entries(data as any)\n .filter(([key]) => !keyColumnNames.includes(key))\n .map(([key, value]) => {\n const dbValue = literal(this.formatValue(value));\n return `${ident(key)} = ${dbValue}`;\n })) || [];\n \n if (!updateClauses?.length)\n return this.createCommand([data]);\n \n const columnNames = Object.keys(data as any); // Assuming all objects have the same keys\n const values = columnNames.map((key) => this.formatValue((data as any)[key]));\n\n let query = format(`INSERT INTO ${ident(this.dbSchema)}.${ident(\n this.tableName,\n )} (%I) VALUES (%L) ON CONFLICT (%I) DO UPDATE SET`, columnNames, values, keyColumnNames);\n\n query += ` ${updateClauses.join(', ')} RETURNING *;`;\n\n return this.runQuery(query);\n }\n\n private buildFilterClauseForFilterGroups(\n filterGroups: IFilter[][],\n ): string {\n const filterClauses = filterGroups.map((filterGroup) => {\n return `(${this.buildFilterClause(filterGroup)})`;\n });\n return filterClauses.join(' OR ');\n }\n\n async deleteCommand(\n filters?: ICompositeFilter | IFilter[] | IFilter[][],\n useFilterGroups: boolean = false,\n ): Promise<QueryResult<any>> {\n let query = `DELETE FROM ${ident(this.dbSchema)}.${ident(\n this.tableName,\n )}`;\n if (filters) {\n query += ' WHERE ';\n\n if (useFilterGroups) {\n query += this.buildFilterClauseForFilterGroups(\n filters as IFilter[][],\n );\n } else {\n query += this.buildFilterClause(\n filters as ICompositeFilter | IFilter[],\n );\n }\n }\n\n return this.runQuery(query);\n }\n\n query(queryText: string, values?: any[]) {\n return this.runQuery(queryText, values);\n }\n\n public async updateExpressionCommand(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: Partial<IUpdateExpressionsOptions> = {},\n ) {\n let query = `UPDATE ${ident(this.dbSchema)}.${ident(\n this.tableName,\n )} SET`;\n\n const set = actions.SET || [];\n const add = actions.ADD || [];\n const columns = this.crudSchema.columns;\n\n const setValues = this.replacePathAndValueByAttributeNames(\n set,\n options,\n columns,\n DYNAMO_DB_UPDATE_ACTIONS.SET,\n );\n const addValues = this.replacePathAndValueByAttributeNames(\n add,\n options,\n columns,\n DYNAMO_DB_UPDATE_ACTIONS.ADD,\n );\n\n const setValuesAndAddValues: any = setValues.concat(addValues);\n\n const updateClauses: any = [];\n const jsonSetExpressionGroup: any = {};\n const queryFunctions: any = [];\n\n setValuesAndAddValues.forEach((expression: any) => {\n const { path, value, createNewColumn, actionName, dynamoFuncName } =\n expression;\n\n //Dynamo functions replacement\n if (dynamoFuncName) {\n queryFunctions.push({ path, value, dynamoFuncName });\n }\n\n if (path.includes('.') && !dynamoFuncName) {\n const jsonExpr = this.getJSONBSetExpressionByAction(\n path,\n value,\n {\n createNewColumn,\n actionName,\n },\n );\n const columnName: string = jsonExpr.columnName;\n if (!jsonSetExpressionGroup[columnName]) {\n jsonSetExpressionGroup[columnName] = [jsonExpr];\n } else {\n jsonSetExpressionGroup[columnName].push(jsonExpr);\n }\n } else if (!dynamoFuncName) {\n let expValue;\n const column = this.crudSchema.columns[path];\n if (column?.type == undefined)\n throw `Column type definition for column: (${path}) must be in the CrudSchema`;\n let formattedValue;\n switch (column.type) {\n case 'object':\n {\n const valueSerialized = `${JSON.stringify(\n value,\n ).replace(/'/g, \"''\")}`;\n expValue = `'${valueSerialized}'::jsonb`;\n }\n break;\n case 'array':\n formattedValue = literal(value);\n expValue = `ARRAY[${formattedValue}]`;\n break;\n default:\n formattedValue = literal(value);\n expValue = formattedValue;\n break;\n }\n this.crudSchema.columns;\n updateClauses.push(`${ident(path)} = ${expValue}`);\n }\n });\n\n this.setCommonColumnsQueryFunctions(\n jsonSetExpressionGroup,\n queryFunctions,\n );\n\n if (Object.keys(jsonSetExpressionGroup).length > 0) {\n Object.keys(jsonSetExpressionGroup).forEach((groupIndex) => {\n const jsonSetExpression = this.buildJSONBExpression(\n jsonSetExpressionGroup[groupIndex],\n 'jsonb_set',\n );\n\n updateClauses.push(`${groupIndex} = ${jsonSetExpression}`);\n });\n }\n\n //This is for dynamo functions transformed to postgresql functions\n this.buildUpdateClausesFormDynamoFunctions(\n queryFunctions,\n updateClauses,\n );\n\n query += ` ${updateClauses.join(', ')}`;\n\n query += ' WHERE ';\n query += this.buildFilterClause(filters);\n\n return this.runQuery(query);\n }\n\n private buildUpdateClausesFormDynamoFunctions(\n queryFunctions: any,\n updateClauses: any,\n ) {\n if (queryFunctions.length > 0) {\n queryFunctions.forEach((queryFunction: any) => {\n if (typeof queryFunction.value == 'object') {\n const jsonExpr = this.buildJSONBExpression(\n queryFunction.value.jsonExpression,\n 'jsonb_insert',\n );\n updateClauses.push(\n `${ident(queryFunction.path)} = ${jsonExpr}`,\n );\n } else {\n updateClauses.push(\n `${ident(queryFunction.path)} = ${queryFunction.value}`,\n );\n }\n });\n }\n }\n\n private setCommonColumnsQueryFunctions(\n jsonSetExpressionGroup: any,\n queryFunctions: any,\n ) {\n Object.keys(jsonSetExpressionGroup).forEach((jsonSetExpr: any) => {\n queryFunctions.forEach((queryFunction: any, index: number) => {\n const columnPath = `\"${queryFunction.path}\"`;\n if (columnPath === jsonSetExpr) {\n jsonSetExpressionGroup[jsonSetExpr].push({\n ...queryFunction,\n isCommonColumn: true,\n });\n delete queryFunctions[index];\n }\n });\n });\n }\n\n /**\n * @description Builds a jsonb expression like jsonb_insert, or jsonb_set\n * @param jsonSetExpressions\n * @param functionName\n * @returns\n */\n private buildJSONBExpression(\n jsonSetExpressions: any,\n functionName: string,\n ) {\n let jsonSetStringExpr = '';\n jsonSetExpressions.forEach((expression: any, index: number) => {\n let _tempFunctionName = functionName;\n let { columnName, jsonExpr } = expression;\n //Is a common column for dynamoDBFunctions\n if (expression.isCommonColumn) {\n const jsonExpression = expression.value.jsonExpression[0];\n _tempFunctionName = jsonExpression.functionName;\n jsonExpr = jsonExpression.jsonExpr;\n columnName = jsonExpression.columnName;\n }\n if (index === 0) {\n jsonSetStringExpr = `${_tempFunctionName}(${columnName},${jsonExpr})`;\n } else {\n jsonSetStringExpr = `${_tempFunctionName}(${jsonSetStringExpr},${jsonExpr})`;\n }\n });\n return jsonSetStringExpr;\n }\n\n /**\n * @description Serializes a JSON value\n * @param value\n * @returns\n */\n private serializeJSONValue(value: any) {\n const valueSerialized =\n typeof value == 'object'\n ? `${JSON.stringify(value).replace(/'/g, \"''\")}`\n : value;\n return valueSerialized;\n }\n\n private getJSONBSetExpressionByAction(\n path: string,\n value: any,\n options: any,\n ) {\n path = path.replace(/\\[(\\d+)\\]/g, '.$1');\n const pathSplitted = path.split('.');\n const parentPath = pathSplitted[0];\n const { createNewColumn, actionName } = options;\n\n const pathSerialized = pathSplitted.slice(1).join(',');\n const valueSerialized = `'${JSON.stringify(value).replace(\n /'/g,\n \"''\",\n )}'`;\n\n if (actionName == DYNAMO_DB_UPDATE_ACTIONS.ADD) {\n if (typeof value != 'string' && !isNaN(value)) {\n const resultExpr = {\n jsonExpr: `'{${pathSerialized}}',to_jsonb(COALESCE((\"${parentPath}\"#>'{${pathSerialized}}')::numeric,0) + ${valueSerialized})`,\n columnName: `\"${parentPath}\"`,\n };\n return resultExpr;\n }\n }\n return {\n jsonExpr: `'{${pathSerialized}}',${valueSerialized},${createNewColumn}`,\n columnName: `\"${parentPath}\"`,\n };\n }\n\n private getListAppendDefFromValue(queryValue: string, columnType: string) {\n const regexListAppend = /list_append\\(([^)]+)\\)/gm;\n const listAppendString = 'list_append(';\n\n const matchList = queryValue.match(regexListAppend) || [];\n const groupResult = matchList[0];\n\n if (groupResult) {\n const attributesFromGroup = groupResult\n .slice(listAppendString.length, -1)\n .split(',');\n const attributes = {\n originalString: groupResult,\n path: attributesFromGroup[0].trim(),\n value: attributesFromGroup.slice(1).join(',').trim(),\n isDynamoFunction: true,\n functionExpr: '',\n jsonExpression: [{}],\n };\n if (columnType == 'array') {\n attributes['functionExpr'] =\n this.buildArrayAppendExpr(attributes);\n } else {\n attributes['jsonExpression'] =\n this.buildJsonbInsertExpr(attributes);\n }\n return attributes;\n }\n\n return null;\n }\n\n private buildArrayAppendExpr(params: any) {\n const arrayPath = params.path.split('.');\n const columnName = arrayPath.shift();\n return `ARRAY_APPEND(\"${columnName}\",${params.value})`;\n }\n\n private buildJsonbInsertExpr(params: any) {\n const arrayPath = params.path.split('.');\n const columnName = arrayPath.shift();\n const options = {\n isDynamoFunction: params?.isDynamoFunction,\n relativePath:\n arrayPath.length && Array.isArray(arrayPath) ? arrayPath : [],\n };\n const jsonbInsertExpressions =\n this.getExpressionsByDefinitionForJSONBInsert(\n columnName,\n params.value,\n options,\n );\n\n return jsonbInsertExpressions;\n }\n\n private getExpressionsByDefinitionForJSONBInsert(\n columnName: string,\n value: string,\n options: any,\n ) {\n const jsonbInsertExpressions = [];\n let pathToAffect = '0';\n if (options.isDynamoFunction == true) {\n options.relativePath.push('0');\n pathToAffect = options.relativePath.join(',');\n }\n try {\n const parsedValue = JSON.parse(value);\n\n if (Array.isArray(parsedValue)) {\n parsedValue.forEach((arrayValue) => {\n arrayValue =\n typeof arrayValue == 'string'\n ? `\"${arrayValue}\"`\n : arrayValue;\n jsonbInsertExpressions.push({\n jsonExpr: `'{${pathToAffect}}','${this.serializeJSONValue(\n arrayValue,\n )}'`,\n columnName: `\"${columnName}\"`,\n functionName: 'jsonb_insert',\n });\n });\n } else {\n jsonbInsertExpressions.push({\n jsonExpr: `'{${pathToAffect}}','${this.serializeJSONValue(\n parsedValue,\n )}'`,\n columnName: `\"${columnName}\"`,\n functionName: 'jsonb_insert',\n });\n }\n } catch (error) {\n jsonbInsertExpressions.push({\n jsonExpr: `'{${pathToAffect}}','${value}'`,\n columnName: `\"${columnName}\"`,\n functionName: 'jsonb_insert',\n });\n }\n return jsonbInsertExpressions;\n }\n\n private getInsertExprFromJsonbDef(queryValue: string, columnType: string) {\n const listAppendParams = this.getListAppendDefFromValue(\n queryValue,\n columnType,\n );\n if (\n listAppendParams != null &&\n listAppendParams?.jsonExpression.length === 0\n ) {\n queryValue = queryValue.replace(\n listAppendParams.originalString,\n listAppendParams.functionExpr,\n );\n } else {\n return listAppendParams;\n }\n\n return queryValue;\n }\n\n private replacePathAndValueByAttributeNames(\n actions: any[],\n options: IUpdateExpressionsOptions,\n columns: any,\n actionName: string,\n ) {\n return actions.map((action) => {\n action.path = this.replaceExpressionAttributeNames(\n action.path,\n options,\n );\n if (\n typeof action.value == 'string' &&\n action.value.includes('list_append')\n ) {\n action.path = action.path.split('.')[0];\n const column = columns[action.path];\n action.value =\n this.replaceExpressionAttributeValuesForDynamoFunctions(\n action.value,\n options,\n );\n action.value = this.getInsertExprFromJsonbDef(\n action.value,\n column.type,\n );\n action.dynamoFuncName = 'list_append';\n } else {\n action.value = this.replaceExpressionAttributeValues(\n action.value,\n options,\n );\n }\n\n action.actionName = actionName;\n action.createNewColumn = true;\n return action;\n });\n }\n\n private replaceExpressionAttributeValuesForDynamoFunctions(\n value: string,\n options: any,\n ) {\n const { expressionAttributeNames, expressionAttributeValues } = options;\n const exprAttributeNamesKeys = expressionAttributeNames\n ? Object.keys(expressionAttributeNames)\n : [];\n const exprAttributeValuesKeys = expressionAttributeValues\n ? Object.keys(expressionAttributeValues)\n : [];\n\n //Set for attribute names\n if (exprAttributeNamesKeys.length > 0) {\n exprAttributeNamesKeys.forEach((exprAttribute) => {\n value = value.replace(\n exprAttribute,\n expressionAttributeNames[exprAttribute],\n );\n });\n }\n\n //Set for attribute values\n if (exprAttributeValuesKeys.length > 0) {\n exprAttributeValuesKeys.forEach((exprAttribute) => {\n const valueSerialized = this.serializeJSONValue(\n expressionAttributeValues[exprAttribute],\n );\n value = value.replace(exprAttribute, `${valueSerialized}`);\n });\n }\n return value;\n }\n\n private replaceExpressionAttributeNames(\n path: string,\n options: IUpdateExpressionsOptions,\n ) {\n const { expressionAttributeNames } = options;\n\n if (expressionAttributeNames) {\n Object.keys(expressionAttributeNames).forEach(\n (attributeName: string) => {\n const attributeNameValue: string =\n expressionAttributeNames[attributeName];\n path = path.replace(attributeName, attributeNameValue);\n },\n );\n }\n return path;\n }\n\n private replaceExpressionAttributeValues(\n value: string,\n options: IUpdateExpressionsOptions,\n ) {\n const { expressionAttributeValues } = options;\n if (expressionAttributeValues[value] != undefined) {\n return expressionAttributeValues[value];\n }\n\n return value;\n }\n\n private getValueTypeAsPostgresDefinition(value: any) {\n switch (typeof value) {\n case 'number':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'string':\n default:\n return 'text';\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport PostgresqlClientService from './postgreSqlClient.service';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n ICrudService,\n IFilter,\n IFindOptions,\n IFindResult,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n IUpdateOptions,\n} from '../../../interfaces';\nimport { CrudSchema } from '../../../schemas';\nimport { findIdColumnName } from '../../../helpers/tableHelper';\nimport { AGGREGATE_FUNCTIONS } from '../../../utils/constants';\nimport { buildAggFunctionAlias } from '../../../helpers/queryHelpers';\nimport { PersistenceErrorWrapper } from '../../../helpers/errorHelper';\nimport { DbPool } from '../../../types';\nexport class PostgreSqlCrudService<T>\n extends PostgresqlClientService<T>\n implements ICrudService<T>\n{\n constructor(\n private tableSchema: typeof CrudSchema,\n poolClient?: DbPool,\n ) {\n super(tableSchema, poolClient);\n }\n\n private get idColumnName(): string | undefined {\n return findIdColumnName(this.tableSchema.columns);\n }\n\n normalizeInputData(inputData: any) {\n inputData.qvAttributes = {};\n for (const key in inputData) {\n if (!this.tableSchema.columns[key] && key !== 'qvAttributes') {\n inputData.qvAttributes[key] = inputData[key];\n delete inputData[key];\n } else if (\n Array.isArray(inputData[key]) &&\n this.tableSchema.columns[key]?.type !== 'array'\n ) {\n inputData[key] = JSON.stringify(inputData[key]);\n }\n }\n }\n\n getItem(data: { [key: string]: any }): any {\n const schemaColumns = Object.entries(this.tableSchema.columns);\n schemaColumns.forEach(([key, value]) => {\n if (value.type === 'big_number') {\n if (data[key]) data[key] = Number(data[key]);\n }\n });\n const resultItem = { ...data, ...data.qvAttributes };\n delete resultItem['qvAttributes'];\n return resultItem;\n }\n\n prepareData(data: T): any {\n const inputData = { ...data } as { [key: string]: any };\n this.normalizeInputData(inputData);\n return inputData;\n }\n\n buildCreateResponseBatch(result: any): ICreateMultipleResponse {\n const rows = Array.isArray(result?.rows) ? result.rows : [];\n return {\n items: rows.map((r: any) => this.getItem(r)),\n unprocessedItems: [],\n };\n }\n\n create(data: T | T[]): Promise<T | ICreateMultipleResponse> {\n if (Array.isArray(data)) {\n const inputDataArray = data.map((item) => this.prepareData(item));\n return this.createCommand(inputDataArray).then((result) => {\n return this.buildCreateResponseBatch(result);\n });\n } else {\n const inputData = this.prepareData(data);\n return this.createCommand([inputData]).then((result) =>\n result.rowCount ? this.getItem(result.rows[0]) : null,\n );\n }\n }\n\n findItem(findOptions: IFindOptions): Promise<T | null> {\n return this.findCommand(findOptions).then((data) => {\n return data?.length\n ? this.getItem(data[0] as { [key: string]: any })\n : null;\n });\n }\n\n private async processQueryResult(\n findOptions: IFindOptions,\n omitPagination: boolean = false,\n ): Promise<IFindResult<T>> {\n const rows = await this.findCommand(findOptions);\n const items = rows.map((row) =>\n this.getItem(row as { [key: string]: any }),\n );\n\n const { limit, from } = findOptions?.pagination || {};\n const hasMoreRecords = items.length && items.length === limit;\n const newFrom = limit && hasMoreRecords ? limit + (from || 0) : null;\n\n const result: IFindResult<T> = {\n items,\n pagination: omitPagination ? null : { limit: limit, from: newFrom },\n count: items.length,\n };\n return result;\n }\n\n async find(findOptions: IFindOptions): Promise<IFindResult<T>> {\n return this.processQueryResult(findOptions);\n }\n\n async findAll(findOptions: IFindOptions): Promise<IFindResult<T>> {\n return this.processQueryResult(findOptions, true);\n }\n\n async findCount(findOptions: IFindOptions): Promise<number> {\n const items = await this.findCommand({\n ...findOptions,\n aggregateFunction: AGGREGATE_FUNCTIONS.COUNT,\n });\n\n const aggFunctionProperty = buildAggFunctionAlias(\n AGGREGATE_FUNCTIONS.COUNT,\n );\n const item: any = items.length ? items[0] : {};\n return item[aggFunctionProperty] || 0;\n }\n\n async update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n options: IUpdateOptions = {},\n ): Promise<any> {\n const savedRecord = options?.skipFindItems\n ? {}\n : await this.findItem({ filters });\n\n const inputData: any = {\n ...savedRecord,\n ...data,\n } as {\n [key: string]: any;\n };\n\n const result = await this.updateCommand(filters, this.prepareData(inputData));\n if (options?.returnRowsAffected) {\n return result.rowCount || 0;\n }\n\n return this.getItem(inputData);\n }\n\n async upsert(\n keyColumnNames: string[],\n data: T,\n ): Promise<any> {\n const inputData = this.prepareData(data);\n return this.upsertCommand(keyColumnNames, inputData).then((result) =>\n result.rowCount && result.rows?.length ? this.getItem(result.rows[0]) : null,\n );\n }\n\n async remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions,\n ): Promise<void> {\n await this.deleteCommand(filters, options?.filterGroups);\n }\n\n runQuery(querySentence: string, values?: any[]) {\n return super.runQuery(querySentence, values);\n }\n\n async updateExpressions(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: IUpdateExpressionsOptions,\n ): Promise<any> {\n const result = await this.updateExpressionCommand(\n filters,\n actions,\n options,\n );\n return PersistenceErrorWrapper(result);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n runRawQuery(query: string, params: any[]): Promise<any> {\n return super.runQuery(query, params);\n }\n}\n","import { Pool } from 'pg';\nimport { ICrudService } from '../interfaces';\nimport { CrudSchema } from '../schemas';\nimport { PostgreSqlCrudService, DynamoDbCrudService } from './cruds/';\nexport class CrudFactory {\n static databaseClientService<T>(\n crudSchema: typeof CrudSchema,\n pool?: Pool,\n ): ICrudService<T> {\n const isMultiPlatformMode =\n process.env.PLATFORM_TYPE?.toLowerCase() === 'container';\n\n if (isMultiPlatformMode)\n return new PostgreSqlCrudService<T>(crudSchema, pool);\n return new DynamoDbCrudService<T>(crudSchema);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Pool } from 'pg';\nimport {\n buildQueryIndex,\n buildFilter,\n buildSort,\n} from '../helpers/crudHelpers';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n IFilter,\n IFindOptions,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n IUpdateOptions,\n} from '../interfaces';\nimport { CrudSchema } from '../schemas';\nimport { CrudFactory } from './crudFactory.service';\n\nclass CrudService<T> {\n private crudSchema: typeof CrudSchema;\n\n constructor(\n crudSchema: typeof CrudSchema,\n private pool?: Pool,\n ) {\n this.crudSchema = crudSchema;\n }\n\n private async getCrudServiceInstance() {\n const crudService = await CrudFactory.databaseClientService(\n this.crudSchema,\n this.pool,\n );\n return crudService;\n }\n\n private getDefaultValue(columnName: string): any {\n const column = this.crudSchema.columns[columnName];\n return column ? column.default : undefined;\n }\n\n private setDefaultValues(data: any) {\n const defaultValues: { [key: string]: any } = {};\n const columns = this.crudSchema.columns;\n\n for (const columnName in columns) {\n const missingColumnValue = !(columnName in data);\n const columnDefaultValue = this.getDefaultValue(columnName);\n if (missingColumnValue && columnDefaultValue) {\n defaultValues[columnName] = columnDefaultValue;\n }\n }\n\n return { ...defaultValues, ...data };\n }\n\n create(data: T | T[]): Promise<unknown | ICreateMultipleResponse> {\n const processedData = Array.isArray(data)\n ? data.map(this.setDefaultValues.bind(this))\n : this.setDefaultValues(data);\n\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.create(processedData),\n );\n }\n\n find(options: IFindOptions) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.find(options),\n );\n }\n\n findItem(options: IFindOptions) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findItem(options),\n );\n }\n\n update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n options: IUpdateOptions = {},\n ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.update(filters, data, options),\n );\n }\n\n upsert(\n keyColumnNames: string[],\n data: T,\n ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.upsert(keyColumnNames, data),\n );\n }\n\n remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions = {},\n ): Promise<void> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.remove(filters, options),\n );\n }\n\n findAll(options: IFindOptions) {\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\n const { pagination, ...findAllOptions } = options;\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findAll(findAllOptions),\n );\n }\n\n findCount(findCountOptions: IFindOptions): Promise<number> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findCount(findCountOptions),\n );\n }\n\n buildFilter(\n attribute: string,\n value: any,\n operator = 'EQUAL',\n relativePath = undefined,\n ) {\n return buildFilter(attribute, value, operator, relativePath);\n }\n\n buildQueryIndex(indexName: string, columns: string[]) {\n return buildQueryIndex(indexName, columns);\n }\n\n buildSort(column: string, direction: string) {\n return buildSort(column, direction);\n }\n\n updateExpression(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options?: IUpdateExpressionsOptions,\n ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.updateExpressions(filters, actions, options),\n );\n }\n\n runRawQuery(query: string, params: any[]) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.runRawQuery(query, params),\n );\n }\n}\n\nexport default CrudService;\n","import { PoolClient } from 'pg';\nimport { ITableName, ITableColumns } from '../interfaces';\n\nexport class CrudSchema {\n static table: string | ITableName;\n static columns: ITableColumns;\n static usePool?: boolean = false;\n static schema: string | null = null;\n static poolClient?: PoolClient;\n static isTemporalTable: boolean = false;\n}\n","import { FILTER_LOGIC_OPERATORS } from '../utils/constants';\n\nconst VALID_FILTER_LOGIC_OPERATORS: FILTER_LOGIC_OPERATORS[] = Object.values(\n FILTER_LOGIC_OPERATORS,\n);\n\nexport type FilterLogicOperator = (typeof VALID_FILTER_LOGIC_OPERATORS)[number];\n","import { CONNECTION_CLOSING_MODES } from '../utils/constants';\n\nconst VALID_CONNECTION_CLOSING_MODES: CONNECTION_CLOSING_MODES[] =\n Object.values(CONNECTION_CLOSING_MODES);\n\nexport type ConnectionClosingMode =\n (typeof VALID_CONNECTION_CLOSING_MODES)[number];\n","import { Pool, PoolConfig } from 'pg';\nimport { isMultiPlatformMode } from '../utils/constants';\n\nexport function getDbPool(poolConfig?: PoolConfig) {\n if (!isMultiPlatformMode()) return undefined;\n\n const pool = new Pool({\n ...poolConfig,\n connectionString: process.env.MULTIPLATFORM_PG_CONNECTION_STRING,\n });\n return pool;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/constants.ts","../../src/helpers/crudHelpers.ts","../../src/services/cruds/dynamodb/dynamoDbClient.service.ts","../../src/helpers/queryHelpers.ts","../../src/services/cruds/dynamodb/queryBuilderCondition.service.ts","../../src/services/cruds/dynamodb/queryBuilder.service.ts","../../src/helpers/tableHelper.ts","../../src/error/NoRecordsAffectedException.ts","../../src/helpers/errorHelper.ts","../../src/services/cruds/dynamodb/dynamoDbCrud.service.ts","../../src/services/cruds/postgresql/connection.service.ts","../../src/services/cruds/postgresql/query.service.ts","../../src/services/cruds/postgresql/postgreSqlClient.service.ts","../../src/services/cruds/postgresql/postgreSqlCrud.service.ts","../../src/services/crudFactory.service.ts","../../src/services/crud.service.ts","../../src/schemas/crudSchema.ts","../../src/types/filterLogicOperator.type.ts","../../src/types/connectionClosingMode.type.ts","../../src/services/dbPool.service.ts"],"names":["CONNECTION_CLOSING_MODES","FILTER_LOGIC_OPERATORS","_a","_b","isMultiPlatformMode"],"mappings":"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","file":"index.mjs","sourcesContent":["export const FILTER_OPERATOR_MAP: { [key: string]: string } = {\n CONTAINS: 'contains',\n NOT_CONTAINS: 'notContains',\n EQUAL: 'eq',\n STARTS_WITH: 'beginsWith',\n NOT_EQUAL: 'notEq',\n IN: 'in',\n GREATER_THAN: 'gt',\n GT: 'gt',\n GREATER_THAN_EQUAL: 'gte',\n GTE: 'gte',\n LESS_THAN: 'lt',\n LT: 'lt',\n LESS_THAN_EQUAL: 'lte',\n LTE: 'lte',\n EXIST: 'attribute_exists',\n NOT_EXIST: 'attribute_not_exists',\n BETWEEN: 'between',\n};\n\nexport const DYNAMODB_OPERATORS: { [key: string]: string } = {\n EQUAL: 'EQUAL',\n};\n\nexport enum SORT_DIRECTIONS {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\nexport enum CONNECTION_CLOSING_MODES {\n AUTO = 'AUTO',\n MANUAL = 'MANUAL',\n}\n\nexport enum FILTER_LOGIC_OPERATORS {\n AND = 'AND',\n OR = 'OR',\n}\n\nexport enum FilterOperator {\n EQUAL = 'EQUAL',\n NOT_EQUAL = 'NOT_EQUAL',\n CONTAINS = 'CONTAINS',\n GREATER_THAN = 'GREATER_THAN',\n GREATER_THAN_EQUAL = 'GREATER_THAN_EQUAL',\n LESS_THAN = 'LESS_THAN',\n LESS_THAN_EQUAL = 'LESS_THAN_EQUAL',\n IN = 'IN',\n STARTS_WITH = 'STARTS_WITH',\n NOT_CONTAINS = 'NOT_CONTAINS',\n BETWEEN = 'BETWEEN',\n EXIST = 'EXIST',\n NOT_EXIST = 'NOT_EXIST',\n}\n\nexport const POSTGRES_FILTER_OPERATOR_MAP = {\n EQUAL: '=',\n NOT_EQUAL: '<>',\n GREATER_THAN: '>',\n GT: '>',\n GTE: '>=',\n GREATER_THAN_EQUAL: '>=',\n LTE: '<=',\n LESS_THAN_EQUAL: '<=',\n LESS_THAN: '<',\n LT: '<',\n IN: 'IN',\n STARTS_WITH: 'LIKE',\n CONTAINS: 'LIKE',\n NOT_CONTAINS: 'NOT LIKE',\n BETWEEN: 'BETWEEN',\n EXIST: 'IS NOT NULL',\n NOT_EXIST: 'IS NULL',\n};\n\nexport const DEFAULT_PG_SCHEMA = 'public';\n\nexport enum AGGREGATE_FUNCTIONS {\n COUNT = 'COUNT',\n}\n\nexport const DYNAMO_DB_UPDATE_ACTIONS: { [key: string]: string } = {\n SET: 'SET',\n ADD: 'ADD',\n DELETE: 'DELETE',\n REMOVE: 'REMOVE',\n};\n\nexport function isMultiPlatformMode() {\n return process.env.PLATFORM_TYPE?.toLowerCase() === 'container';\n}\n","import { ISorting } from '../interfaces';\nimport { SortDirection } from '../types';\nimport { SORT_DIRECTIONS } from '../utils/constants';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function buildFilter(\n attribute: string,\n value: any,\n operator = 'EQUAL',\n relativePath = undefined,\n) {\n return {\n attribute,\n operator,\n value,\n relativePath,\n };\n}\n\nexport function buildQueryIndex(indexName: string, columns: string[]) {\n return {\n indexName,\n columns,\n };\n}\n\nexport function buildSort(\n column: string,\n direction: string = SORT_DIRECTIONS.ASC,\n): ISorting {\n return {\n column,\n direction: direction as SortDirection,\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport {\n DynamoDBDocumentClient,\n GetCommand,\n QueryCommand,\n PutCommand,\n UpdateCommand,\n DeleteCommand,\n GetCommandInput,\n QueryCommandInput,\n PutCommandInput,\n UpdateCommandInput,\n DeleteCommandInput,\n QueryCommandOutput,\n ScanCommandInput,\n ScanCommand,\n BatchWriteCommandInput,\n BatchWriteCommand,\n} from '@aws-sdk/lib-dynamodb';\nimport { IFilter } from '../../../interfaces';\n\nconst AWS_REGION = process.env.AWS_DEFAULT_REGION;\n\n/**\n * Ref:\n * - https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html\n * - https://www.fernandomc.com/posts/eight-examples-of-fetching-data-from-dynamodb-with-node/\n */\nexport default class DynamoDbClientService {\n private tableName: string;\n protected dynamoDBClient: DynamoDBDocumentClient;\n\n constructor(tableName: string) {\n if (!tableName)\n throw new Error(\n 'The \"tableName\" is required to use a DynamoDbClientService.',\n );\n this.tableName = tableName;\n const client = new DynamoDBClient({ region: AWS_REGION });\n this.dynamoDBClient = DynamoDBDocumentClient.from(client, {\n marshallOptions: {\n removeUndefinedValues: true,\n },\n });\n }\n\n /**\n * Get an item by key\n * @param {Object} keyObject - Ex: { jobId: 1234 }\n * @param {GetCommandInput} options\n */\n public async getByKey(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keyObject: Record<string, any>,\n options: Partial<GetCommandInput> = {},\n ) {\n const params: GetCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ...options,\n };\n const result = await this.dynamoDBClient.send(new GetCommand(params));\n return result.Item;\n }\n\n /**\n * Query a table\n * @param {QueryCommandInput} options\n */\n public async query(\n options: Omit<QueryCommandInput, 'TableName'> = {},\n ): Promise<Omit<QueryCommandOutput, '$metadata'>> {\n const params: QueryCommandInput = {\n TableName: this.tableName,\n ...options,\n };\n const result: Partial<QueryCommandOutput> =\n await this.dynamoDBClient.send(new QueryCommand(params));\n\n if (result.$metadata) delete result.$metadata;\n return result;\n }\n\n /**\n * Scan a table\n * @param {ScanInput} options\n */\n public async scan(\n input: ScanCommandInput,\n ): Promise<Omit<QueryCommandOutput, '$metadata'>> {\n const params: ScanCommandInput = {\n ...input,\n TableName: this.tableName,\n };\n\n const command = new ScanCommand(params);\n const response: Partial<QueryCommandOutput> =\n await this.dynamoDBClient.send(command);\n if (response.$metadata) delete response.$metadata;\n return response;\n }\n\n /**\n * Create/Replace a item object\n * To take care:\n * - https://stackoverflow.com/questions/43667229/difference-between-dynamodb-putitem-vs-updateitem\n * @param {Object} input\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public async put(input: Record<string, any>) {\n const params: PutCommandInput = {\n TableName: this.tableName,\n Item: input,\n ReturnValues: 'NONE',\n };\n return await this.dynamoDBClient.send(new PutCommand(params));\n }\n\n /**\n * Update a item object\n * To take care:\n * - https://stackoverflow.com/questions/43667229/difference-between-dynamodb-putitem-vs-updateitem\n * @param {Object} keyObject - Ex: { jobId: 1234 }\n * @param {UpdateCommandInput} updateObject\n */\n public async update(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keyObject: Record<string, any>,\n options: Partial<UpdateCommandInput> = {},\n ) {\n const params: UpdateCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ReturnValues: 'NONE',\n ...options,\n };\n return await this.dynamoDBClient.send(new UpdateCommand(params));\n }\n\n /**\n * Delete/Remove an item object\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public async remove(keyObject: Record<string, any>) {\n const params: DeleteCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ReturnValues: 'NONE',\n };\n return await this.dynamoDBClient.send(new DeleteCommand(params));\n }\n\n public batchWrittenPut(data: Record<string, any>) {\n const putRequests = data.map((item: any) => ({\n PutRequest: {\n Item: item,\n },\n }));\n const params = {\n RequestItems: {\n [this.tableName]: putRequests,\n },\n } as BatchWriteCommandInput;\n const insertCommand = new BatchWriteCommand(params);\n return this.dynamoDBClient.send(insertCommand);\n }\n\n private buildDeleteRequestKeys(filters: IFilter[]) {\n const deleteRequestKeys: any = {};\n filters.forEach((filter) => {\n deleteRequestKeys[filter.attribute] = filter.value;\n });\n return deleteRequestKeys;\n }\n\n async batchRemove(filterGroups: IFilter[][]): Promise<void> {\n if (!filterGroups?.length) return;\n\n const deleteRequests = filterGroups.map((filterGroup: IFilter[]) => ({\n DeleteRequest: {\n Key: this.buildDeleteRequestKeys(filterGroup),\n },\n }));\n\n const params = {\n RequestItems: {\n [this.tableName]: deleteRequests,\n },\n } as BatchWriteCommandInput;\n\n await this.dynamoDBClient.send(new BatchWriteCommand(params));\n }\n\n public async updateExpressions(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keyObject: Record<string, any>,\n options: Partial<UpdateCommandInput> = {},\n ) {\n const params: UpdateCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ...options,\n };\n\n return await this.dynamoDBClient.send(new UpdateCommand(params));\n }\n}\n","import { AggregateFunction } from '../types';\n\nexport enum METHOD_TO_QUERY {\n where = 'where',\n filter = 'filter',\n update = 'update',\n}\n\nexport function buildAggFunctionAlias(\n aggregateFunction: AggregateFunction,\n): string {\n return `AGG_FN_${aggregateFunction}`;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { QueryCommandInput } from '@aws-sdk/client-dynamodb';\nimport { UpdateCommandInput } from '@aws-sdk/lib-dynamodb';\nimport { IQueryBuilder } from '../../../interfaces/queryBuilder.interface';\nimport { METHOD_TO_QUERY } from '../../../helpers/queryHelpers';\nimport { IQueryBuilderCondition } from '../../../interfaces/queryBuilderCondition.interface';\n\nexport default class QueryBuilderConditionService\n implements IQueryBuilderCondition\n{\n private query;\n private command: Pick<\n QueryCommandInput,\n | 'FilterExpression'\n | 'KeyConditionExpression'\n | 'ExpressionAttributeNames'\n | 'ExpressionAttributeValues'\n > &\n Pick<UpdateCommandInput, 'UpdateExpression'>;\n private queryFrom: METHOD_TO_QUERY | undefined;\n private tempKey: string = '';\n private tempLogicOperator: string | null = null;\n private config: any;\n private wheres: string[] = [];\n private filters: string[] = [];\n private updates: string[] = [];\n private attributeNames: Record<string, string> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private attributeValues: Record<string, any> = {};\n\n constructor(query: IQueryBuilder) {\n this.query = query;\n this.command = {};\n }\n\n public get() {\n this.build();\n return this.command;\n }\n\n public setKey(key: string) {\n this.tempKey = key;\n return this;\n }\n setTmpLogicOp(logicOp: string) {\n this.tempLogicOperator = logicOp;\n return this;\n }\n\n setConfig(config: any) {\n this.config = config;\n return this;\n }\n\n public from(methodName: METHOD_TO_QUERY) {\n this.queryFrom = methodName;\n return this;\n }\n\n eq(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} = ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n notEq(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} <> ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n contains(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `contains(${key}, ${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n notContains(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `NOT contains(${key}, ${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n in(keyValue: any) {\n const keyValues = Array.isArray(keyValue) ? keyValue : [keyValue];\n const { key, value } = this.generateKeyValue(keyValues);\n let expression: any = `${key} IN (${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n beginsWith(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `begins_with(${key}, ${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n project(keyValue: string): string {\n const key = `#${keyValue}`;\n this.attributeNames[key] = keyValue;\n return key;\n }\n\n gt(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} > ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n gte(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} >= ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n lte(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} <= ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n lt(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} < ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n attribute_exists(keyValue: string) {\n const { key } = this.generateKeyValue(keyValue, null, true);\n let expression: any = `attribute_exists(${key})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n attribute_not_exists(keyValue: string) {\n const { key } = this.generateKeyValue(keyValue, null, true);\n let expression: any = `attribute_not_exists(${key})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n between(keyValues: any) {\n const isValidValues =\n Array.isArray(keyValues) && keyValues?.length === 2;\n if (!isValidValues)\n throw new Error(\n 'The value for between filter operator should be an Array with 2 values.',\n );\n\n const { key, value } = this.generateKeyValue(keyValues, ' AND');\n let expression: any = `${key} between ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n private setExpression(expression: string): void {\n switch (this.queryFrom) {\n case METHOD_TO_QUERY.filter:\n this.filters.push(expression);\n break;\n case METHOD_TO_QUERY.update:\n this.updates.push(expression);\n break;\n default:\n this.wheres.push(expression);\n break;\n }\n }\n\n private generateKeyValue(\n value: string[] | string,\n separatorCharacter: string | null = ',',\n omitAttributeValues: boolean = false,\n ): {\n key: string;\n value: string;\n } {\n const keyExpression = `#${this.tempKey}1`;\n\n this.attributeNames[keyExpression] = this.tempKey;\n\n if (Array.isArray(value)) {\n const valueExpressions = value.map((val, index) => {\n let valueExpression = `:${this.tempKey}${index + 1}1`;\n for (const [i] of Object.entries(this.attributeValues)) {\n if (i === valueExpression) valueExpression += '1';\n }\n this.attributeValues[valueExpression] = val;\n return valueExpression;\n });\n return {\n key: keyExpression,\n value: valueExpressions.join(`${separatorCharacter} `),\n };\n } else {\n let valueExpression = `:${this.tempKey}1`;\n if (valueExpression in this.attributeValues) {\n for (const [index] of Object.entries(this.attributeValues)) {\n if (index === valueExpression) valueExpression += '1';\n }\n }\n if (!omitAttributeValues)\n this.attributeValues[valueExpression] = value;\n return { key: keyExpression, value: valueExpression };\n }\n }\n\n private build(): void {\n if (this.wheres.length > 0) {\n const keyConditionExpression = this.wheres.join(' AND ');\n this.command['KeyConditionExpression'] = keyConditionExpression;\n }\n if (this.filters.length > 0) {\n let filterExpression = '';\n\n this.filters?.forEach((filter: any, index) => {\n if (filter?.logicOperator) {\n if (filter?.config?.openExpression) {\n filterExpression = filterExpression.replace(/\\s+(AND|OR)\\s*$/, ` ${filter.config.parentKey} (`);\n if (filterExpression === '') filterExpression += '('\n filterExpression += `${filter.expression} ${filter.logicOperator} `;\n } else if (filter?.config?.closeExpression) {\n filterExpression += `${filter.expression}) ${filter.config.parentKey} `; \n } else {\n filterExpression += `${filter.expression} ${filter.logicOperator} `;\n }\n }\n });\n filterExpression = filterExpression.replace(/\\s+(AND|OR)\\s*$/, '');\n this.command['FilterExpression'] = filterExpression;\n }\n if (this.updates.length > 0) {\n const filterExpression = this.updates.join(', ');\n this.command['UpdateExpression'] = `SET ${filterExpression}`;\n }\n if (Object.values(this.attributeNames).length > 0)\n this.command['ExpressionAttributeNames'] = this.attributeNames;\n\n if (Object.values(this.attributeValues).length > 0)\n this.command['ExpressionAttributeValues'] = this.attributeValues;\n }\n}\n","import { QueryCommandInput, ScanCommandInput } from '@aws-sdk/client-dynamodb';\nimport { IQueryBuilderCondition } from '../../../interfaces/queryBuilderCondition.interface';\nimport QueryBuilderConditionService from './queryBuilderCondition.service';\nimport { METHOD_TO_QUERY } from '../../../helpers/queryHelpers';\nimport { IQueryBuilder } from '../../../interfaces/queryBuilder.interface';\nimport { AGGREGATE_FUNCTIONS } from '../../../utils/constants';\n\nexport default class QueryBuilderService implements IQueryBuilder {\n private command: Omit<QueryCommandInput & ScanCommandInput, 'TableName'>;\n private condition: IQueryBuilderCondition;\n\n constructor(private useScan = false) {\n this.command = {};\n\n this.condition = new QueryBuilderConditionService(this);\n }\n\n get() {\n const condition = this.condition.get();\n return { ...this.command, ...condition };\n }\n\n limit(num: number): IQueryBuilder {\n this.command.Limit = num;\n return this;\n }\n\n usingIndex(indexName: string): IQueryBuilder {\n this.command.IndexName = indexName;\n return this;\n }\n\n ascending(): IQueryBuilder {\n if (!this.useScan) this.command.ScanIndexForward = true;\n return this;\n }\n\n descending(): IQueryBuilder {\n if (!this.useScan) this.command.ScanIndexForward = false;\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n startKey(lastEvaluatedKey: Record<string, any>): IQueryBuilder {\n this.command.ExclusiveStartKey = lastEvaluatedKey;\n return this;\n }\n\n projection(fields: string[] = []) {\n if (!fields.length) return this;\n\n const expression: string[] = [];\n fields.forEach((field) => {\n const key = this.condition.project(field);\n expression.push(key);\n });\n this.command.ProjectionExpression = expression.join(',');\n return this;\n }\n\n where(keyName: string): IQueryBuilderCondition {\n this.condition\n .setKey(keyName)\n .setTmpLogicOp(null)\n .from(METHOD_TO_QUERY.where);\n return this.condition;\n }\n\n filter(\n keyName: string,\n logicOperator: string = 'AND',\n config?: any\n ): IQueryBuilderCondition {\n this.condition\n .setKey(keyName)\n .setTmpLogicOp(logicOperator)\n .setConfig(config)\n .from(METHOD_TO_QUERY.filter);\n return this.condition;\n }\n\n update(attribute: Record<string, string>): IQueryBuilder {\n for (const [key, value] of Object.entries(attribute)) {\n this.condition.setKey(key).from(METHOD_TO_QUERY.update);\n this.condition.eq(value);\n }\n return this;\n }\n\n consistentRead(consistentRead: boolean): IQueryBuilder {\n this.command.ConsistentRead = consistentRead;\n return this;\n }\n\n count(): IQueryBuilder {\n this.command.Select = AGGREGATE_FUNCTIONS.COUNT;\n return this;\n }\n}\n","import { ITableColumns, ITableName } from '../interfaces';\n\nexport function getTableColumnNames(columns: ITableColumns): string[] {\n return Object.keys(columns);\n}\n\nexport function findIdColumnName(columns: ITableColumns): string | undefined {\n return getTableColumnNames(columns).find(\n (columnName) => columns[columnName].columnId === true,\n );\n}\n\nexport function getTableName(\n table: string | ITableName,\n property = 'name',\n): string {\n if (!table) throw new Error('missing table property');\n\n if (typeof table === 'string') return table;\n\n const { name, alias } = table;\n return property === 'alias' && alias ? alias : name;\n}\n\nexport function getPrimaryKeyColumns(columns: ITableColumns): string[] {\n return getTableColumnNames(columns).filter(\n (columnName) => columns[columnName].primary === true,\n );\n}\n","export class NoRecordsAffectedException extends Error {\n constructor() {\n super('No records affected by update');\n this.name = 'NoRecordsAffectedException';\n }\n}\n","import { NoRecordsAffectedException } from '../error/NoRecordsAffectedException';\n\nexport function PersistenceErrorWrapper(queryResult: any) {\n const dynamoNoRecordsAffectedExceptions = [\n 'ConditionalCheckFailedException',\n ];\n\n if (queryResult instanceof Error) {\n //Checks for dynamodb errors also the ones that is included in NoRecordsAffectedExceptions list\n if (\n queryResult.name &&\n dynamoNoRecordsAffectedExceptions.includes(queryResult.name)\n ) {\n throw new NoRecordsAffectedException();\n } else {\n throw queryResult;\n }\n } else {\n //This is for Postgres scenario, where there is not error launched by updates\n if (queryResult.rowCount === 0) {\n throw new NoRecordsAffectedException();\n }\n }\n\n return queryResult;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport DynamoDbClientService from './dynamoDbClient.service';\nimport QueryBuilderService from './queryBuilder.service';\n\nimport {\n AGGREGATE_FUNCTIONS,\n DYNAMODB_OPERATORS,\n FILTER_OPERATOR_MAP,\n DYNAMO_DB_UPDATE_ACTIONS,\n} from '../../../utils/constants';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n ICrudService,\n IFilter,\n IFindOptions,\n IFindPagination,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n IUpdateOptions,\n} from '../../../interfaces';\nimport { CrudSchema } from '../../../schemas/crudSchema';\nimport {\n findIdColumnName,\n getPrimaryKeyColumns,\n getTableName,\n} from '../../../helpers/tableHelper';\nimport { PersistenceErrorWrapper } from '../../../helpers/errorHelper';\nimport {\n QueryCommandInput,\n QueryCommandOutput,\n ScanCommandInput,\n} from '@aws-sdk/lib-dynamodb';\n\nexport class DynamoDbCrudService<T> implements ICrudService<T> {\n private dynamoDbClientService: DynamoDbClientService;\n\n constructor(private tableSchema: typeof CrudSchema) {\n this.dynamoDbClientService = new DynamoDbClientService(this.tableName);\n }\n\n private get tableName(): string {\n return getTableName(this.tableSchema.table);\n }\n\n private get idColumnName(): string | undefined {\n return findIdColumnName(this.tableSchema.columns);\n }\n\n private get defaultPrimaryKeys(): string[] {\n return getPrimaryKeyColumns(this.tableSchema.columns);\n }\n\n async create(data: T | T[]): Promise<T | ICreateMultipleResponse> {\n if (Array.isArray(data)) {\n const response =\n await this.dynamoDbClientService.batchWrittenPut(data);\n return {\n unprocessedItems: response.UnprocessedItems ?? [],\n };\n } else {\n await this.dynamoDbClientService.put(data as Record<string, any>);\n return data as T;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\n runQuery(queryCommand: any): Promise<any> {\n throw new Error('Method not implemented.');\n }\n\n find(options: IFindOptions = {}): Promise<any> {\n const query = new QueryBuilderService(options.useScan);\n\n if (options.index?.indexName)\n query.usingIndex(options.index?.indexName);\n\n this.applySorting(query, options.sorting, options.index?.indexName);\n this.applyPagination(query, options.pagination);\n\n if (options.consistentRead)\n query.consistentRead(options.consistentRead);\n\n if (options.fields) query.projection(options.fields);\n\n this.applyFilters(query, options);\n\n if (options.aggregateFunction === AGGREGATE_FUNCTIONS.COUNT)\n query.count();\n\n return this.fetchResults(\n query.get(),\n options.pagination?.limit,\n options.useScan,\n ).then((res: any) => {\n const pagination: IFindPagination = {};\n if (res.lastEvaluatedKey) pagination.from = res.lastEvaluatedKey;\n if (options.pagination?.limit)\n pagination.limit = options.pagination?.limit;\n return {\n items: res.items,\n pagination,\n count: res.count,\n };\n });\n }\n\n async fetchResults(\n command: ScanCommandInput | QueryCommandInput,\n limit: number = 100,\n useScan: boolean = false,\n ): Promise<unknown> {\n let results: unknown[] = [];\n let lastEvaluatedKey: Record<string, unknown> = {};\n let rowsCount = 0;\n\n do {\n const result = await this.fetchBatch(\n command,\n useScan,\n lastEvaluatedKey,\n );\n const rows = result.Items ?? [];\n results = results.concat(rows);\n lastEvaluatedKey = result.LastEvaluatedKey ?? {};\n rowsCount += result.Count || rows.length;\n } while (rowsCount < limit && this.isNotEmptyObject(lastEvaluatedKey));\n\n const encryptedLastEvaluatedKey = this.isNotEmptyObject(\n lastEvaluatedKey,\n )\n ? this.encryptPaginationKey(lastEvaluatedKey)\n : null;\n return {\n items: results,\n lastEvaluatedKey: encryptedLastEvaluatedKey,\n count: rowsCount,\n };\n }\n\n async fetchBatch(\n command: ScanCommandInput | QueryCommandInput,\n useScan: boolean,\n lastEvaluatedKey: Record<string, unknown>,\n ): Promise<Partial<QueryCommandOutput>> {\n if (this.isNotEmptyObject(lastEvaluatedKey))\n command.ExclusiveStartKey = lastEvaluatedKey;\n\n const result = await (useScan\n ? this.dynamoDbClientService.scan(command)\n : this.dynamoDbClientService.query(command));\n\n if (command.Select !== AGGREGATE_FUNCTIONS.COUNT) {\n command.Limit = (command.Limit ?? 0) - (result.Items?.length ?? 0);\n }\n\n return result;\n }\n\n applyPagination(\n query: QueryBuilderService,\n pagination: IFindPagination | undefined,\n ) {\n if (pagination?.limit) query.limit(pagination.limit);\n if (pagination?.from)\n query.startKey(this.decryptPaginationKey(pagination.from));\n }\n\n async findAll(\n options: IFindOptions = {},\n allResults: any[] = [],\n rowsCount: number = 0,\n ): Promise<any> {\n const { items, pagination, count } = await this.find(options);\n allResults.push(...items);\n rowsCount += count;\n\n if (pagination?.from)\n await this.findAll({ ...options, pagination }, allResults);\n\n return {\n items: allResults,\n pagination: null,\n count: rowsCount,\n };\n }\n\n async findCount(options: IFindOptions = {}): Promise<number> {\n const findOptions = {\n ...options,\n aggregateFunction: AGGREGATE_FUNCTIONS.COUNT,\n };\n if (options.pagination?.from) {\n return this.find(findOptions).then((res) => res.count);\n } else {\n return this.findAll(findOptions).then((res) => res.count);\n }\n }\n\n buildFindItemQuery(options: IFindOptions): QueryBuilderService {\n const query = new QueryBuilderService();\n\n if (options.index?.indexName) query.usingIndex(options.index.indexName);\n\n this.applyFilters(query, options);\n query.projection(options.fields);\n query.limit(1);\n\n return query;\n }\n\n findItem(options: IFindOptions): Promise<T | null> {\n const query = this.buildFindItemQuery(options);\n return this.dynamoDbClientService.query(query.get()).then((result) => {\n if (result.Items?.length) return result.Items[0] as T;\n if (options.throwErrorIfNull) throw new Error('NOT_FOUND');\n return null;\n });\n }\n\n applyWhereFilter(query: QueryBuilderService, filter: IFilter) {\n const operator =\n FILTER_OPERATOR_MAP[\n filter.operator?.toUpperCase() ?? DYNAMODB_OPERATORS.EQUAL\n ];\n (query.where(filter.attribute) as any)[operator](filter.value);\n }\n\n applyFilterFilter(\n query: QueryBuilderService,\n filter: IFilter,\n logicOperator: string = 'AND',\n config?: any,\n ) {\n const operator =\n FILTER_OPERATOR_MAP[\n filter.operator?.toUpperCase() ?? DYNAMODB_OPERATORS.EQUAL\n ];\n (query.filter(filter.attribute, logicOperator, config) as any)[\n operator\n ](filter.value);\n }\n\n applyFilters(query: QueryBuilderService, options: IFindOptions) {\n if (Array.isArray(options.filters)) {\n this.applySimpleFilters(query, options);\n } else {\n this.applyCompoundFilters(query, options);\n }\n }\n\n applySimpleFilters(query: QueryBuilderService, options: IFindOptions) {\n const queryIndexColumns = options.index?.columns ?? [];\n const defaultWhereProperties = this.defaultPrimaryKeys;\n\n const whereProperties: string[] = queryIndexColumns?.length\n ? queryIndexColumns\n : defaultWhereProperties;\n const filters = options.filters as IFilter[];\n filters.forEach((filter: IFilter) => {\n const isWhereProperty = whereProperties.includes(filter.attribute);\n isWhereProperty && !options.useScan\n ? this.applyWhereFilter(query, filter)\n : this.applyFilterFilter(query, filter);\n });\n }\n\n applyCompoundFilters(query: QueryBuilderService, options: IFindOptions) {\n if (!options.filters) return;\n this.buildFilterExpression(query, options);\n }\n\n buildFilterExpression(\n query: QueryBuilderService,\n options: IFindOptions,\n parentKey?: string,\n ) {\n const compositeFilters = options.filters as ICompositeFilter;\n const queryIndexColumns = options.index?.columns || [];\n const defaultWhereProperties = this.defaultPrimaryKeys;\n\n const whereProperties = queryIndexColumns?.length\n ? queryIndexColumns\n : defaultWhereProperties;\n\n for (const [key, value] of Object.entries(compositeFilters)) {\n value.forEach(\n (filter: IFilter | ICompositeFilter, index: number) => {\n const isCompositeFilter = 'OR' in filter || 'AND' in filter;\n if (isCompositeFilter) {\n const newOptions = {\n ...options,\n filters: filter,\n };\n this.buildFilterExpression(query, newOptions, key);\n } else {\n const simpleFilter = filter as IFilter;\n const isWhereProperty = whereProperties.includes(\n simpleFilter.attribute,\n );\n let config;\n if (parentKey) {\n config = {\n parentKey,\n openExpression: index === 0,\n closeExpression: index === value.length - 1,\n };\n }\n\n isWhereProperty && !options.useScan\n ? this.applyWhereFilter(query, simpleFilter)\n : this.applyFilterFilter(\n query,\n simpleFilter,\n key,\n config,\n );\n }\n },\n );\n }\n }\n\n applySorting(query: QueryBuilderService, sorting: any, sortIndex?: string) {\n if (sorting?.length) {\n if (sortIndex) query.usingIndex(sortIndex);\n if (sorting[0].direction === 'DESC') {\n query.descending();\n } else {\n query.ascending();\n }\n }\n }\n\n isNotEmptyObject(obj: unknown) {\n return (\n obj !== null &&\n typeof obj === 'object' &&\n Object.keys(obj).length > 0\n );\n }\n\n encryptPaginationKey(key: Record<string, any>): string {\n const jsonKey = JSON.stringify(key);\n return Buffer.from(jsonKey).toString('base64');\n }\n\n decryptPaginationKey(encodedKey: string): Record<string, any> {\n const decodedKey = Buffer.from(encodedKey, 'base64').toString('utf-8');\n return JSON.parse(decodedKey);\n }\n\n async update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n options?: IUpdateOptions,\n ): Promise<any> {\n const savedRecord = options?.skipFindItems\n ? {}\n : await this.findItem({\n filters: filters as IFilter[],\n });\n\n const newData: any = {\n ...savedRecord,\n ...data,\n };\n\n await this.dynamoDbClientService.put(newData);\n\n if (options?.returnRowsAffected) {\n return 1;\n }\n\n return newData;\n }\n\n async upsert(\n keyColumnNames: string[],\n data: T\n ): Promise<T | null> {\n const filters = [] as IFilter[];\n\n keyColumnNames.map(key => {\n filters.push({ attribute: key, value: (data as any)[key], operator: 'EQUAL' });\n });\n\n const savedRecord = await this.findItem({\n filters: filters as IFilter[],\n });\n\n const newData: any = {\n ...savedRecord,\n ...data,\n };\n\n await this.dynamoDbClientService.put(newData);\n return newData;\n }\n\n async remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions,\n ) {\n if (options?.filterGroups) {\n await this.dynamoDbClientService.batchRemove(\n filters as IFilter[][],\n );\n } else {\n const key = (filters as IFilter[]).reduce((obj: any, item: any) => {\n const property = item.attribute;\n obj[property] = item.value;\n return obj;\n }, {});\n await this.dynamoDbClientService.remove(key);\n }\n }\n\n async updateExpressions(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: IUpdateExpressionsOptions,\n ): Promise<any> {\n try {\n return await this.#prepareAndExecuteUpdateExpression(\n filters,\n actions,\n options,\n );\n } catch (error: any) {\n PersistenceErrorWrapper(error);\n }\n }\n\n async #prepareAndExecuteUpdateExpression(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: IUpdateExpressionsOptions,\n ) {\n const queryObject = this.#buildUpdateExpressionQuery({ filters }).get();\n const primaryKeys = this.defaultPrimaryKeys;\n\n const keyObject: any = this.#getKeyObjectForUpdateExpression(\n queryObject,\n primaryKeys,\n );\n\n const updateExpressions: any = [];\n\n Object.keys(actions).forEach((action: string) => {\n const actionUpdateExpression =\n this.#extractUpdateExpressionAttributesAndNames(\n actions,\n action,\n );\n updateExpressions.push(actionUpdateExpression);\n });\n\n const dbParams = {\n UpdateExpression: updateExpressions.join(' '),\n ...this.#getUpdateExpressionOptions(options),\n };\n\n const { ExpressionAttributeValues, ExpressionAttributeNames } =\n queryObject;\n if (Object.keys(ExpressionAttributeValues).length > 0) {\n dbParams['ExpressionAttributeValues'] = {\n ...ExpressionAttributeValues,\n ...dbParams.ExpressionAttributeValues,\n };\n }\n\n if (Object.keys(ExpressionAttributeNames).length > 0) {\n dbParams['ExpressionAttributeNames'] = {\n ...ExpressionAttributeNames,\n ...dbParams.ExpressionAttributeNames,\n };\n }\n if (queryObject.FilterExpression)\n dbParams['ConditionExpression'] = queryObject.FilterExpression;\n\n return this.dynamoDbClientService.updateExpressions(\n keyObject,\n dbParams,\n );\n }\n\n #buildUpdateExpressionQuery(options: IFindOptions): QueryBuilderService {\n const query = new QueryBuilderService();\n\n if (options.index?.indexName) query.usingIndex(options.index.indexName);\n this.applyFilters(query, options);\n\n return query;\n }\n\n #getKeyObjectForUpdateExpression(queryObject: any, primaryKeys: any) {\n const keyObject: any = {};\n\n Object.keys(queryObject.ExpressionAttributeNames).forEach(\n (attribute) => {\n const sanitizedAttribute = attribute\n .replace('#', '')\n .replace('1', '');\n if (primaryKeys.includes(sanitizedAttribute)) {\n const valueName = `:${sanitizedAttribute}1`;\n keyObject[sanitizedAttribute] =\n queryObject.ExpressionAttributeValues[valueName];\n delete queryObject.ExpressionAttributeValues[valueName];\n delete queryObject.ExpressionAttributeNames[attribute];\n }\n },\n );\n\n return keyObject;\n }\n\n #getUpdateExpressionOptions(options: IUpdateExpressionsOptions) {\n const updateExprOptions: any = {\n ReturnValues: options.returnValues,\n };\n\n if (options.expressionAttributeNames)\n updateExprOptions.ExpressionAttributeNames =\n options.expressionAttributeNames;\n if (options.expressionAttributeValues)\n updateExprOptions.ExpressionAttributeValues =\n options.expressionAttributeValues;\n\n return updateExprOptions;\n }\n\n #extractUpdateExpressionAttributesAndNames(\n actions: any,\n actionType: string,\n ) {\n const actionUpdateExpressions: any = [];\n\n actions[actionType].forEach((action: any) => {\n switch (actionType) {\n case DYNAMO_DB_UPDATE_ACTIONS.DELETE:\n case DYNAMO_DB_UPDATE_ACTIONS.REMOVE:\n actionUpdateExpressions.push(`${action.path}`);\n break;\n\n case DYNAMO_DB_UPDATE_ACTIONS.ADD:\n case DYNAMO_DB_UPDATE_ACTIONS.SET:\n {\n let operator = '';\n if (actionType == DYNAMO_DB_UPDATE_ACTIONS.SET)\n operator = '=';\n actionUpdateExpressions.push(\n `${action.path} ${operator}${action.value}`,\n );\n }\n break;\n }\n });\n\n const actionUpdateExpression = `${actionType} ${actionUpdateExpressions.join(\n ', ',\n )}`;\n\n return actionUpdateExpression;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n runRawQuery(query: string, params: any[]): Promise<any> {\n throw new Error('Method not implemented.');\n }\n}\n","import { Client } from 'pg';\n\nexport default class ConnectionService {\n get connectionString() {\n const connectionString =\n process.env.MULTIPLATFORM_PG_CONNECTION_STRING || '';\n if (!connectionString) {\n throw new Error(\n 'MULTIPLATFORM_PG_CONNECTION_STRING environment variable must be configured',\n );\n }\n return connectionString;\n }\n\n async getClient(): Promise<Client> {\n const client: Client = new Client({\n connectionString: this.connectionString,\n });\n await client.connect();\n return client;\n }\n\n releaseClient(client: Client): void {\n try {\n client.end();\n } catch {\n // eslint-disable-next-line no-console\n console.log('Error releasing client');\n }\n }\n}\n","/* eslint-disable no-console */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Client, PoolClient, QueryResult } from 'pg';\nimport ConnectionService from './connection.service';\nimport { DbPool } from '../../../types';\n\nexport default class QueryService {\n private connectionService: ConnectionService;\n\n constructor(private pool?: DbPool) {\n this.connectionService = new ConnectionService();\n }\n\n async runQuery(\n queryText: string,\n values?: any[],\n ): Promise<QueryResult<any>> {\n const client: PoolClient | Client | any = await (this.pool\n ? this.pool.connect()\n : this.connectionService.getClient());\n\n try {\n if (process.env.NODE_ENV === 'development')\n console.info('[data-persistence] Query as Text:', queryText);\n const result = await client.query(queryText, values);\n return result;\n } finally {\n if (this.pool) {\n await client.release();\n } else {\n this.connectionService.releaseClient(client as Client);\n }\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-console */\n\nimport { ident, literal, format } from '@scaleleap/pg-format';\nimport { QueryResult } from 'pg';\nimport { AggregateFunction, DbPool, FilterLogicOperator } from '../../../types';\nimport {\n ICompositeFilter,\n IFilter,\n IFindOptions,\n IFindPagination,\n ISorting,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n} from '../../../interfaces';\nimport QueryService from './query.service';\nimport {\n FILTER_LOGIC_OPERATORS,\n SORT_DIRECTIONS,\n POSTGRES_FILTER_OPERATOR_MAP,\n DEFAULT_PG_SCHEMA,\n FilterOperator,\n DYNAMO_DB_UPDATE_ACTIONS,\n} from '../../../utils/constants';\nimport { CrudSchema } from '../../../schemas';\nimport { getTableName } from '../../../helpers/tableHelper';\nimport { buildAggFunctionAlias } from '../../../helpers/queryHelpers';\nimport { IFindRawWith } from '../../../interfaces/findRawWith.interface';\n\nexport default class PostgresqlClientService<T> extends QueryService {\n private crudSchema: typeof CrudSchema;\n constructor(tableSchema: typeof CrudSchema, poolClient?: DbPool) {\n super(poolClient);\n this.crudSchema = tableSchema;\n }\n\n get dbSchema() {\n return this.crudSchema.schema || DEFAULT_PG_SCHEMA;\n }\n\n get tableName() {\n return (\n getTableName(this.crudSchema.table, 'alias') ||\n getTableName(this.crudSchema.table)\n );\n }\n\n get isTemporalTable() {\n return this.crudSchema?.isTemporalTable;\n }\n\n getWildcardValue(operator: FilterOperator, value: string): string {\n if (\n operator === FilterOperator.CONTAINS ||\n operator === FilterOperator.NOT_CONTAINS\n ) {\n return '%' + value + '%';\n } else if (operator === FilterOperator.STARTS_WITH) {\n return value + '%';\n } else {\n return value;\n }\n }\n\n private buildClause(\n operator: FilterOperator,\n attribute: string,\n relativePath: string | undefined,\n value: any,\n ): string {\n const formattedValue = literal(value);\n operator = operator\n ? (operator.toUpperCase() as FilterOperator)\n : FilterOperator.EQUAL;\n const postgresOperator = POSTGRES_FILTER_OPERATOR_MAP[operator];\n\n if (!postgresOperator)\n throw new Error(`Unsupported filter operator: ${operator}`);\n\n let property;\n const filterProperty = ident(attribute);\n const columnExists = !!this.crudSchema.columns[attribute];\n const columnType =\n columnExists && this.crudSchema.columns[attribute]?.type;\n\n if (relativePath != undefined) {\n const attributePath = relativePath.split('.').join(',');\n\n property = `(\"${attribute}\" #> '{${attributePath}}')`;\n if (value != null) {\n const comparisonValueType =\n this.getValueTypeAsPostgresDefinition(value);\n property += `::${comparisonValueType}`;\n }\n } else {\n property = columnExists\n ? filterProperty\n : `(\"qvAttributes\" ->> '${attribute}')`;\n }\n\n if (operator === FilterOperator.IN) {\n const formattedValues = Array.isArray(value)\n ? value.map(literal)\n : [formattedValue];\n return `${property} ${postgresOperator} (${formattedValues.join(\n ', ',\n )})`;\n }\n\n if (operator === FilterOperator.BETWEEN) {\n return `${property} ${postgresOperator} ${value[0]} AND ${value[1]}`;\n }\n\n /**\n * ? Additional filter to avoid error when column accepts null values.\n */\n if (operator === FilterOperator.NOT_EQUAL && value !== null) {\n return `(${property} ${postgresOperator} ${literal(\n value,\n )} OR ${property} IS NULL)`;\n }\n\n if (\n operator === FilterOperator.NOT_EXIST ||\n operator === FilterOperator.EXIST\n ) {\n return `${property} ${postgresOperator}`;\n }\n\n if (\n (operator === FilterOperator.CONTAINS ||\n operator === FilterOperator.NOT_CONTAINS) &&\n columnType === 'array'\n ) {\n const filterValue =\n typeof value === 'number' ? value : `'${value}'`;\n let filterString = `${filterValue} = ANY(${property})`;\n\n if (operator === FilterOperator.NOT_CONTAINS) {\n if (value === null) {\n filterString = `(NOT (${filterString}))`;\n } else {\n filterString = `(NOT (${filterString}) or ${property} IS NULL)`;\n }\n }\n return filterString;\n }\n\n const wildcardValue = this.getWildcardValue(operator, value);\n return `${property} ${postgresOperator} ${literal(wildcardValue)}`;\n }\n\n private buildFilterClause(\n filters: IFilter[] | ICompositeFilter,\n logicOperator?: FilterLogicOperator,\n ): string {\n if (Array.isArray(filters)) {\n const filterClauses = filters.map((filter) => {\n return this.buildClause(\n filter.operator as FilterOperator,\n filter.attribute,\n filter.relativePath,\n filter.value,\n );\n });\n return filterClauses.join(\n ` ${logicOperator ?? FILTER_LOGIC_OPERATORS.AND} `,\n );\n } else {\n return this.buildQueryByClause(filters);\n }\n }\n\n private isCompositeFilter = function (value: any) {\n return 'OR' in value || 'AND' in value;\n };\n\n buildQueryByClause(filters: IFilter[] | ICompositeFilter): string {\n let filterClauses: string = '';\n let isFirstFilter = true;\n\n for (const [key, value] of Object.entries(filters)) {\n if (!isFirstFilter) {\n filterClauses += key === 'AND' ? ' AND ' : ' OR ';\n }\n\n if (this.isCompositeFilter(value)) {\n filterClauses += '(';\n filterClauses += this.buildQueryByClause(\n value as ICompositeFilter,\n );\n filterClauses += ')';\n } else {\n (value as IFilter[]).forEach((filter: IFilter) => {\n let clause = '';\n if (this.isCompositeFilter(filter)) {\n clause = `(${this.buildQueryByClause(\n filter as ICompositeFilter,\n )})`;\n } else {\n clause = this.buildClause(\n filter.operator as FilterOperator,\n filter.attribute,\n filter.relativePath,\n filter.value,\n );\n }\n filterClauses += `${clause} ${key} `;\n });\n }\n\n isFirstFilter = false;\n }\n\n filterClauses = filterClauses.replace(/\\s+(AND|OR)\\s*$/, '');\n return filterClauses;\n }\n\n private formatOrderByItem(sort: ISorting): string {\n return `${ident(sort.column)} ${sort.direction || SORT_DIRECTIONS.ASC}`;\n }\n\n private buildOrderByClause(querySorting: ISorting[]): string {\n try {\n return querySorting.map(this.formatOrderByItem).join(', ');\n } catch (error) {\n return '';\n }\n }\n\n formatArray(array: any[]) {\n const isNumberArray = typeof array[0] === 'number';\n if (isNumberArray) {\n return `{${array.join(',')}}`;\n } else {\n return `{${array.map((val) => `\"${val}\"`).join(',')}}`;\n }\n }\n\n formatValue(value: any) {\n if (Array.isArray(value)) {\n if (!value?.length) return '{}';\n const isNumberArray = typeof value[0] === 'number';\n if (isNumberArray) {\n return `{${value.join(',')}}`;\n } else {\n return `{${value.map((val: any) => `\"${val}\"`).join(',')}}`;\n }\n }\n return value;\n }\n\n async createCommand(data: any[]): Promise<any> {\n const keys = Object.keys(data[0]); // Assuming all objects have the same keys\n const values = data.map((item) =>\n keys.map((key) => this.formatValue(item[key])),\n );\n\n const query = format(\n `INSERT INTO ${ident(this.dbSchema)}.${ident(\n this.tableName,\n )} (%I) VALUES %L RETURNING *;`,\n keys,\n values,\n );\n\n return this.runQuery(query);\n }\n\n private isValidFiltersInput(\n filters: IFilter[] | ICompositeFilter,\n ): boolean {\n const isValidArrayFilters =\n Array.isArray(filters) && filters?.length > 0;\n const isValidCompositeFilters = this.isCompositeFilter(filters);\n return isValidArrayFilters || isValidCompositeFilters;\n }\n\n private replaceFilterTokensInQuery(\n query: string,\n filters?: IFilter[] | ICompositeFilter,\n ) {\n if (!filters) return query;\n\n if (this.isValidFiltersInput(filters)) {\n const filterClause = this.buildFilterClause(filters);\n return query.replace(/{{filters}}/g, filterClause);\n }\n }\n\n private addFiltersToQuery(\n query: string,\n filters?: IFilter[] | ICompositeFilter,\n ): string {\n if (!filters) return query;\n\n if (this.isValidFiltersInput(filters))\n query += ` WHERE ${this.buildFilterClause(filters)}`;\n return query;\n }\n\n addOrderByToQuery(query: string, orderBy?: ISorting[]): string {\n if (orderBy) query += ` ORDER BY ${this.buildOrderByClause(orderBy)}`;\n return query;\n }\n\n private addPaginationToQuery(\n query: string,\n pagination?: IFindPagination,\n ): string {\n if (pagination) {\n const { limit, from } = pagination;\n if (limit) query += ` LIMIT ${limit}`;\n if (from) query += ` OFFSET ${from}`;\n }\n return query;\n }\n\n private getSelectClause(\n aggregateFunction: AggregateFunction | undefined,\n fields: string[] = [],\n ) {\n if (aggregateFunction)\n return `CAST(${aggregateFunction}(1) AS INTEGER) AS \"${buildAggFunctionAlias(\n aggregateFunction,\n )}\"`;\n if (!fields?.length) return '*';\n\n return this.parseFields(fields).join(', ');\n }\n\n private parseFields(fields: String[]): String[] {\n const columnsFromSchema: String[] = Object.keys(\n this.crudSchema.columns,\n );\n const attributes: String[] = fields\n .filter((field) => columnsFromSchema.indexOf(field) !== -1)\n .map((field) => `\"${field}\"`);\n\n fields\n .filter((field) => columnsFromSchema.indexOf(field) === -1)\n .forEach((field) => {\n attributes.push(`\"qvAttributes\" ->> '${field}' as \"${field}\"`);\n });\n return attributes;\n }\n\n private resolveWithQueries(rawWith: IFindRawWith[]): string[] {\n const withQueries = rawWith.map(({ alias, query, filters }) => {\n const withQuery = this.replaceFilterTokensInQuery(query, filters);\n return `${alias} AS (${withQuery})`;\n });\n return withQueries;\n }\n\n getRawWithClause(rawWith?: IFindRawWith[]): string {\n let rawWithClause = '';\n if (rawWith?.length) {\n const withQueries = this.resolveWithQueries(rawWith);\n rawWithClause = 'WITH ' + withQueries.join(',\\n');\n }\n return rawWithClause;\n }\n\n getQueryFrom() {\n return this.isTemporalTable\n ? ident(this.tableName)\n : `${ident(this.dbSchema)}.${ident(this.tableName)}`;\n }\n\n async findCommand(options: IFindOptions = {}): Promise<T[]> {\n const rawWithClause = this.getRawWithClause(options.rawWith);\n let query = `SELECT ${this.getSelectClause(\n options.aggregateFunction,\n options.fields,\n )} FROM ${this.getQueryFrom()}`;\n query = this.addFiltersToQuery(query, options.filters);\n if (!options.aggregateFunction) {\n query = this.addOrderByToQuery(query, options.sorting);\n query = this.addPaginationToQuery(query, options.pagination);\n }\n if (rawWithClause) {\n query = `${rawWithClause} ${query}`;\n }\n return (await this.runQuery(query)).rows;\n }\n\n sanitizeValue(value: any): string {\n if (Array.isArray(value)) {\n if (value.length === 0) '[]';\n const formattedArray = value\n .map((item) => {\n if (typeof item === 'string') {\n return `'${item}'`;\n } else if (typeof item === 'object') {\n return JSON.stringify(item);\n } else {\n return item;\n }\n })\n .join(',');\n\n return JSON.stringify(formattedArray);\n } else {\n return literal(value);\n }\n }\n\n async updateCommand(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<any>,\n ): Promise<QueryResult<any>> {\n let query = `UPDATE ${ident(this.dbSchema)}.${ident(\n this.tableName,\n )} SET`;\n\n const updateClauses = Object.entries(data).map(([key, value]) => {\n const dbValue = literal(this.formatValue(value));\n return `${ident(key)} = ${dbValue}`;\n });\n query += ` ${updateClauses.join(', ')}`;\n\n query += ' WHERE ';\n query += this.buildFilterClause(filters);\n\n return this.runQuery(query);\n }\n\n async upsertCommand(\n keyColumnNames: string[],\n data: T\n ): Promise<any> {\n const updateClauses = (keyColumnNames?.length &&\n Object.entries(data as any)\n .filter(([key]) => !keyColumnNames.includes(key))\n .map(([key, value]) => {\n const dbValue = literal(this.formatValue(value));\n return `${ident(key)} = ${dbValue}`;\n })) || [];\n \n if (!updateClauses?.length)\n return this.createCommand([data]);\n \n const columnNames = Object.keys(data as any); // Assuming all objects have the same keys\n const values = columnNames.map((key) => this.formatValue((data as any)[key]));\n\n let query = format(`INSERT INTO ${ident(this.dbSchema)}.${ident(\n this.tableName,\n )} (%I) VALUES (%L) ON CONFLICT (%I) DO UPDATE SET`, columnNames, values, keyColumnNames);\n\n query += ` ${updateClauses.join(', ')} RETURNING *;`;\n\n return this.runQuery(query);\n }\n\n private buildFilterClauseForFilterGroups(\n filterGroups: IFilter[][],\n ): string {\n const filterClauses = filterGroups.map((filterGroup) => {\n return `(${this.buildFilterClause(filterGroup)})`;\n });\n return filterClauses.join(' OR ');\n }\n\n async deleteCommand(\n filters?: ICompositeFilter | IFilter[] | IFilter[][],\n useFilterGroups: boolean = false,\n ): Promise<QueryResult<any>> {\n let query = `DELETE FROM ${ident(this.dbSchema)}.${ident(\n this.tableName,\n )}`;\n if (filters) {\n query += ' WHERE ';\n\n if (useFilterGroups) {\n query += this.buildFilterClauseForFilterGroups(\n filters as IFilter[][],\n );\n } else {\n query += this.buildFilterClause(\n filters as ICompositeFilter | IFilter[],\n );\n }\n }\n\n return this.runQuery(query);\n }\n\n query(queryText: string, values?: any[]) {\n return this.runQuery(queryText, values);\n }\n\n public async updateExpressionCommand(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: Partial<IUpdateExpressionsOptions> = {},\n ) {\n let query = `UPDATE ${ident(this.dbSchema)}.${ident(\n this.tableName,\n )} SET`;\n\n const set = actions.SET || [];\n const add = actions.ADD || [];\n const columns = this.crudSchema.columns;\n\n const setValues = this.replacePathAndValueByAttributeNames(\n set,\n options,\n columns,\n DYNAMO_DB_UPDATE_ACTIONS.SET,\n );\n const addValues = this.replacePathAndValueByAttributeNames(\n add,\n options,\n columns,\n DYNAMO_DB_UPDATE_ACTIONS.ADD,\n );\n\n const setValuesAndAddValues: any = setValues.concat(addValues);\n\n const updateClauses: any = [];\n const jsonSetExpressionGroup: any = {};\n const queryFunctions: any = [];\n\n setValuesAndAddValues.forEach((expression: any) => {\n const { path, value, createNewColumn, actionName, dynamoFuncName } =\n expression;\n\n //Dynamo functions replacement\n if (dynamoFuncName) {\n queryFunctions.push({ path, value, dynamoFuncName });\n }\n\n if (path.includes('.') && !dynamoFuncName) {\n const jsonExpr = this.getJSONBSetExpressionByAction(\n path,\n value,\n {\n createNewColumn,\n actionName,\n },\n );\n const columnName: string = jsonExpr.columnName;\n if (!jsonSetExpressionGroup[columnName]) {\n jsonSetExpressionGroup[columnName] = [jsonExpr];\n } else {\n jsonSetExpressionGroup[columnName].push(jsonExpr);\n }\n } else if (!dynamoFuncName) {\n let expValue;\n let columnName = path;\n let setObjProperty = false;\n let column = this.crudSchema.columns[columnName];\n\n let columnType = column?.type;\n if (!columnType) {\n setObjProperty = true;\n columnName = 'qvAttributes';\n column = this.crudSchema.columns[columnName];\n if (column?.type == undefined)\n throw `Column type definition for column: (${path}) must be in the CrudSchema`;\n\n columnType = Array.isArray(value) ? 'array' :\n typeof value == 'object' ? 'object' :\n 'default';\n }\n\n switch (columnType) {\n case 'object':\n {\n const valueSerialized = `${JSON.stringify(\n value,\n ).replace(/'/g, \"''\")}`;\n expValue = `'${valueSerialized}'::jsonb`;\n }\n break;\n case 'array':\n expValue = `ARRAY[${literal(value)}]`;\n break;\n default:\n expValue = literal(value);\n break;\n }\n\n if (setObjProperty) {\n expValue = `jsonb_set(${ident(columnName)}, '{${path}}', ${expValue}, true)`;\n }\n\n updateClauses.push(`${ident(columnName)} = ${expValue}`);\n }\n });\n\n this.setCommonColumnsQueryFunctions(\n jsonSetExpressionGroup,\n queryFunctions,\n );\n\n if (Object.keys(jsonSetExpressionGroup).length > 0) {\n Object.keys(jsonSetExpressionGroup).forEach((groupIndex) => {\n const jsonSetExpression = this.buildJSONBExpression(\n jsonSetExpressionGroup[groupIndex],\n 'jsonb_set',\n );\n\n updateClauses.push(`${groupIndex} = ${jsonSetExpression}`);\n });\n }\n\n //This is for dynamo functions transformed to postgresql functions\n this.buildUpdateClausesFormDynamoFunctions(\n queryFunctions,\n updateClauses,\n );\n\n query += ` ${updateClauses.join(', ')}`;\n\n query += ' WHERE ';\n query += this.buildFilterClause(filters);\n\n return this.runQuery(query);\n }\n\n private buildUpdateClausesFormDynamoFunctions(\n queryFunctions: any,\n updateClauses: any,\n ) {\n if (queryFunctions.length > 0) {\n queryFunctions.forEach((queryFunction: any) => {\n if (typeof queryFunction.value == 'object') {\n const jsonExpr = this.buildJSONBExpression(\n queryFunction.value.jsonExpression,\n 'jsonb_insert',\n );\n updateClauses.push(\n `${ident(queryFunction.path)} = ${jsonExpr}`,\n );\n } else {\n updateClauses.push(\n `${ident(queryFunction.path)} = ${queryFunction.value}`,\n );\n }\n });\n }\n }\n\n private setCommonColumnsQueryFunctions(\n jsonSetExpressionGroup: any,\n queryFunctions: any,\n ) {\n Object.keys(jsonSetExpressionGroup).forEach((jsonSetExpr: any) => {\n queryFunctions.forEach((queryFunction: any, index: number) => {\n const columnPath = `\"${queryFunction.path}\"`;\n if (columnPath === jsonSetExpr) {\n jsonSetExpressionGroup[jsonSetExpr].push({\n ...queryFunction,\n isCommonColumn: true,\n });\n delete queryFunctions[index];\n }\n });\n });\n }\n\n /**\n * @description Builds a jsonb expression like jsonb_insert, or jsonb_set\n * @param jsonSetExpressions\n * @param functionName\n * @returns\n */\n private buildJSONBExpression(\n jsonSetExpressions: any,\n functionName: string,\n ) {\n let jsonSetStringExpr = '';\n jsonSetExpressions.forEach((expression: any, index: number) => {\n let _tempFunctionName = functionName;\n let { columnName, jsonExpr } = expression;\n //Is a common column for dynamoDBFunctions\n if (expression.isCommonColumn) {\n const jsonExpression = expression.value.jsonExpression[0];\n _tempFunctionName = jsonExpression.functionName;\n jsonExpr = jsonExpression.jsonExpr;\n columnName = jsonExpression.columnName;\n }\n if (index === 0) {\n jsonSetStringExpr = `${_tempFunctionName}(${columnName},${jsonExpr})`;\n } else {\n jsonSetStringExpr = `${_tempFunctionName}(${jsonSetStringExpr},${jsonExpr})`;\n }\n });\n return jsonSetStringExpr;\n }\n\n /**\n * @description Serializes a JSON value\n * @param value\n * @returns\n */\n private serializeJSONValue(value: any) {\n const valueSerialized =\n typeof value == 'object'\n ? `${JSON.stringify(value).replace(/'/g, \"''\")}`\n : value;\n return valueSerialized;\n }\n\n private getJSONBSetExpressionByAction(\n path: string,\n value: any,\n options: any,\n ) {\n path = path.replace(/\\[(\\d+)\\]/g, '.$1');\n const pathSplitted = path.split('.');\n const parentPath = pathSplitted[0];\n const { createNewColumn, actionName } = options;\n\n const pathSerialized = pathSplitted.slice(1).join(',');\n const valueSerialized = `'${JSON.stringify(value).replace(\n /'/g,\n \"''\",\n )}'`;\n\n if (actionName == DYNAMO_DB_UPDATE_ACTIONS.ADD) {\n if (typeof value != 'string' && !isNaN(value)) {\n const resultExpr = {\n jsonExpr: `'{${pathSerialized}}',to_jsonb(COALESCE((\"${parentPath}\"#>'{${pathSerialized}}')::numeric,0) + ${valueSerialized})`,\n columnName: `\"${parentPath}\"`,\n };\n return resultExpr;\n }\n }\n return {\n jsonExpr: `'{${pathSerialized}}',${valueSerialized},${createNewColumn}`,\n columnName: `\"${parentPath}\"`,\n };\n }\n\n private getListAppendDefFromValue(queryValue: string, columnType: string) {\n const regexListAppend = /list_append\\(([^)]+)\\)/gm;\n const listAppendString = 'list_append(';\n\n const matchList = queryValue.match(regexListAppend) || [];\n const groupResult = matchList[0];\n\n if (groupResult) {\n const attributesFromGroup = groupResult\n .slice(listAppendString.length, -1)\n .split(',');\n const attributes = {\n originalString: groupResult,\n path: attributesFromGroup[0].trim(),\n value: attributesFromGroup.slice(1).join(',').trim(),\n isDynamoFunction: true,\n functionExpr: '',\n jsonExpression: [{}],\n };\n if (columnType == 'array') {\n attributes['functionExpr'] =\n this.buildArrayAppendExpr(attributes);\n } else {\n attributes['jsonExpression'] =\n this.buildJsonbInsertExpr(attributes);\n }\n return attributes;\n }\n\n return null;\n }\n\n private buildArrayAppendExpr(params: any) {\n const arrayPath = params.path.split('.');\n const columnName = arrayPath.shift();\n return `ARRAY_APPEND(\"${columnName}\",${params.value})`;\n }\n\n private buildJsonbInsertExpr(params: any) {\n const arrayPath = params.path.split('.');\n const columnName = arrayPath.shift();\n const options = {\n isDynamoFunction: params?.isDynamoFunction,\n relativePath:\n arrayPath.length && Array.isArray(arrayPath) ? arrayPath : [],\n };\n const jsonbInsertExpressions =\n this.getExpressionsByDefinitionForJSONBInsert(\n columnName,\n params.value,\n options,\n );\n\n return jsonbInsertExpressions;\n }\n\n private getExpressionsByDefinitionForJSONBInsert(\n columnName: string,\n value: string,\n options: any,\n ) {\n const jsonbInsertExpressions = [];\n let pathToAffect = '0';\n if (options.isDynamoFunction == true) {\n options.relativePath.push('0');\n pathToAffect = options.relativePath.join(',');\n }\n try {\n const parsedValue = JSON.parse(value);\n\n if (Array.isArray(parsedValue)) {\n parsedValue.forEach((arrayValue) => {\n arrayValue =\n typeof arrayValue == 'string'\n ? `\"${arrayValue}\"`\n : arrayValue;\n jsonbInsertExpressions.push({\n jsonExpr: `'{${pathToAffect}}','${this.serializeJSONValue(\n arrayValue,\n )}'`,\n columnName: `\"${columnName}\"`,\n functionName: 'jsonb_insert',\n });\n });\n } else {\n jsonbInsertExpressions.push({\n jsonExpr: `'{${pathToAffect}}','${this.serializeJSONValue(\n parsedValue,\n )}'`,\n columnName: `\"${columnName}\"`,\n functionName: 'jsonb_insert',\n });\n }\n } catch (error) {\n jsonbInsertExpressions.push({\n jsonExpr: `'{${pathToAffect}}','${value}'`,\n columnName: `\"${columnName}\"`,\n functionName: 'jsonb_insert',\n });\n }\n return jsonbInsertExpressions;\n }\n\n private getInsertExprFromJsonbDef(queryValue: string, columnType: string) {\n const listAppendParams = this.getListAppendDefFromValue(\n queryValue,\n columnType,\n );\n if (\n listAppendParams != null &&\n listAppendParams?.jsonExpression.length === 0\n ) {\n queryValue = queryValue.replace(\n listAppendParams.originalString,\n listAppendParams.functionExpr,\n );\n } else {\n return listAppendParams;\n }\n\n return queryValue;\n }\n\n private replacePathAndValueByAttributeNames(\n actions: any[],\n options: IUpdateExpressionsOptions,\n columns: any,\n actionName: string,\n ) {\n return actions.map((action) => {\n action.path = this.replaceExpressionAttributeNames(\n action.path,\n options,\n );\n if (\n typeof action.value == 'string' &&\n action.value.includes('list_append')\n ) {\n action.path = action.path.split('.')[0];\n const column = columns[action.path];\n action.value =\n this.replaceExpressionAttributeValuesForDynamoFunctions(\n action.value,\n options,\n );\n action.value = this.getInsertExprFromJsonbDef(\n action.value,\n column.type,\n );\n action.dynamoFuncName = 'list_append';\n } else {\n action.value = this.replaceExpressionAttributeValues(\n action.value,\n options,\n );\n }\n\n action.actionName = actionName;\n action.createNewColumn = true;\n return action;\n });\n }\n\n private replaceExpressionAttributeValuesForDynamoFunctions(\n value: string,\n options: any,\n ) {\n const { expressionAttributeNames, expressionAttributeValues } = options;\n const exprAttributeNamesKeys = expressionAttributeNames\n ? Object.keys(expressionAttributeNames)\n : [];\n const exprAttributeValuesKeys = expressionAttributeValues\n ? Object.keys(expressionAttributeValues)\n : [];\n\n //Set for attribute names\n if (exprAttributeNamesKeys.length > 0) {\n exprAttributeNamesKeys.forEach((exprAttribute) => {\n value = value.replace(\n exprAttribute,\n expressionAttributeNames[exprAttribute],\n );\n });\n }\n\n //Set for attribute values\n if (exprAttributeValuesKeys.length > 0) {\n exprAttributeValuesKeys.forEach((exprAttribute) => {\n const valueSerialized = this.serializeJSONValue(\n expressionAttributeValues[exprAttribute],\n );\n value = value.replace(exprAttribute, `${valueSerialized}`);\n });\n }\n return value;\n }\n\n private replaceExpressionAttributeNames(\n path: string,\n options: IUpdateExpressionsOptions,\n ) {\n const { expressionAttributeNames } = options;\n\n if (expressionAttributeNames) {\n Object.keys(expressionAttributeNames).forEach(\n (attributeName: string) => {\n const attributeNameValue: string =\n expressionAttributeNames[attributeName];\n path = path.replace(attributeName, attributeNameValue);\n },\n );\n }\n return path;\n }\n\n private replaceExpressionAttributeValues(\n value: string,\n options: IUpdateExpressionsOptions,\n ) {\n const { expressionAttributeValues } = options;\n if (expressionAttributeValues[value] != undefined) {\n return expressionAttributeValues[value];\n }\n\n return value;\n }\n\n private getValueTypeAsPostgresDefinition(value: any) {\n switch (typeof value) {\n case 'number':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'string':\n default:\n return 'text';\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport PostgresqlClientService from './postgreSqlClient.service';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n ICrudService,\n IFilter,\n IFindOptions,\n IFindResult,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n IUpdateOptions,\n} from '../../../interfaces';\nimport { CrudSchema } from '../../../schemas';\nimport { findIdColumnName } from '../../../helpers/tableHelper';\nimport { AGGREGATE_FUNCTIONS } from '../../../utils/constants';\nimport { buildAggFunctionAlias } from '../../../helpers/queryHelpers';\nimport { PersistenceErrorWrapper } from '../../../helpers/errorHelper';\nimport { DbPool } from '../../../types';\nexport class PostgreSqlCrudService<T>\n extends PostgresqlClientService<T>\n implements ICrudService<T>\n{\n constructor(\n private tableSchema: typeof CrudSchema,\n poolClient?: DbPool,\n ) {\n super(tableSchema, poolClient);\n }\n\n private get idColumnName(): string | undefined {\n return findIdColumnName(this.tableSchema.columns);\n }\n\n normalizeInputData(inputData: any) {\n inputData.qvAttributes = {};\n for (const key in inputData) {\n if (!this.tableSchema.columns[key] && key !== 'qvAttributes') {\n inputData.qvAttributes[key] = inputData[key];\n delete inputData[key];\n } else if (\n Array.isArray(inputData[key]) &&\n this.tableSchema.columns[key]?.type !== 'array'\n ) {\n inputData[key] = JSON.stringify(inputData[key]);\n }\n }\n }\n\n getItem(data: { [key: string]: any }): any {\n const schemaColumns = Object.entries(this.tableSchema.columns);\n schemaColumns.forEach(([key, value]) => {\n if (value.type === 'big_number') {\n if (data[key]) data[key] = Number(data[key]);\n }\n });\n const resultItem = { ...data, ...data.qvAttributes };\n delete resultItem['qvAttributes'];\n return resultItem;\n }\n\n prepareData(data: T): any {\n const inputData = { ...data } as { [key: string]: any };\n this.normalizeInputData(inputData);\n return inputData;\n }\n\n buildCreateResponseBatch(result: any): ICreateMultipleResponse {\n const rows = Array.isArray(result?.rows) ? result.rows : [];\n return {\n items: rows.map((r: any) => this.getItem(r)),\n unprocessedItems: [],\n };\n }\n\n create(data: T | T[]): Promise<T | ICreateMultipleResponse> {\n if (Array.isArray(data)) {\n const inputDataArray = data.map((item) => this.prepareData(item));\n return this.createCommand(inputDataArray).then((result) => {\n return this.buildCreateResponseBatch(result);\n });\n } else {\n const inputData = this.prepareData(data);\n return this.createCommand([inputData]).then((result) =>\n result.rowCount ? this.getItem(result.rows[0]) : null,\n );\n }\n }\n\n findItem(findOptions: IFindOptions): Promise<T | null> {\n return this.findCommand(findOptions).then((data) => {\n return data?.length\n ? this.getItem(data[0] as { [key: string]: any })\n : null;\n });\n }\n\n private async processQueryResult(\n findOptions: IFindOptions,\n omitPagination: boolean = false,\n ): Promise<IFindResult<T>> {\n const rows = await this.findCommand(findOptions);\n const items = rows.map((row) =>\n this.getItem(row as { [key: string]: any }),\n );\n\n const { limit, from } = findOptions?.pagination || {};\n const hasMoreRecords = items.length && items.length === limit;\n const newFrom = limit && hasMoreRecords ? limit + (from || 0) : null;\n\n const result: IFindResult<T> = {\n items,\n pagination: omitPagination ? null : { limit: limit, from: newFrom },\n count: items.length,\n };\n return result;\n }\n\n async find(findOptions: IFindOptions): Promise<IFindResult<T>> {\n return this.processQueryResult(findOptions);\n }\n\n async findAll(findOptions: IFindOptions): Promise<IFindResult<T>> {\n return this.processQueryResult(findOptions, true);\n }\n\n async findCount(findOptions: IFindOptions): Promise<number> {\n const items = await this.findCommand({\n ...findOptions,\n aggregateFunction: AGGREGATE_FUNCTIONS.COUNT,\n });\n\n const aggFunctionProperty = buildAggFunctionAlias(\n AGGREGATE_FUNCTIONS.COUNT,\n );\n const item: any = items.length ? items[0] : {};\n return item[aggFunctionProperty] || 0;\n }\n\n async update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n options: IUpdateOptions = {},\n ): Promise<any> {\n const savedRecord = options?.skipFindItems\n ? {}\n : await this.findItem({ filters });\n\n const inputData: any = {\n ...savedRecord,\n ...data,\n } as {\n [key: string]: any;\n };\n\n const result = await this.updateCommand(filters, this.prepareData(inputData));\n if (options?.returnRowsAffected) {\n return result.rowCount || 0;\n }\n\n return this.getItem(inputData);\n }\n\n async upsert(\n keyColumnNames: string[],\n data: T,\n ): Promise<any> {\n const inputData = this.prepareData(data);\n return this.upsertCommand(keyColumnNames, inputData).then((result) =>\n result.rowCount && result.rows?.length ? this.getItem(result.rows[0]) : null,\n );\n }\n\n async remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions,\n ): Promise<void> {\n await this.deleteCommand(filters, options?.filterGroups);\n }\n\n runQuery(querySentence: string, values?: any[]) {\n return super.runQuery(querySentence, values);\n }\n\n async updateExpressions(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: IUpdateExpressionsOptions,\n ): Promise<any> {\n const result = await this.updateExpressionCommand(\n filters,\n actions,\n options,\n );\n return PersistenceErrorWrapper(result);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n runRawQuery(query: string, params: any[]): Promise<any> {\n return super.runQuery(query, params);\n }\n}\n","import { Pool } from 'pg';\nimport { ICrudService } from '../interfaces';\nimport { CrudSchema } from '../schemas';\nimport { PostgreSqlCrudService, DynamoDbCrudService } from './cruds/';\nexport class CrudFactory {\n static databaseClientService<T>(\n crudSchema: typeof CrudSchema,\n pool?: Pool,\n ): ICrudService<T> {\n const isMultiPlatformMode =\n process.env.PLATFORM_TYPE?.toLowerCase() === 'container';\n\n if (isMultiPlatformMode)\n return new PostgreSqlCrudService<T>(crudSchema, pool);\n return new DynamoDbCrudService<T>(crudSchema);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Pool } from 'pg';\nimport {\n buildQueryIndex,\n buildFilter,\n buildSort,\n} from '../helpers/crudHelpers';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n IFilter,\n IFindOptions,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n IUpdateOptions,\n} from '../interfaces';\nimport { CrudSchema } from '../schemas';\nimport { CrudFactory } from './crudFactory.service';\n\nclass CrudService<T> {\n private crudSchema: typeof CrudSchema;\n\n constructor(\n crudSchema: typeof CrudSchema,\n private pool?: Pool,\n ) {\n this.crudSchema = crudSchema;\n }\n\n private async getCrudServiceInstance() {\n const crudService = await CrudFactory.databaseClientService(\n this.crudSchema,\n this.pool,\n );\n return crudService;\n }\n\n private getDefaultValue(columnName: string): any {\n const column = this.crudSchema.columns[columnName];\n return column ? column.default : undefined;\n }\n\n private setDefaultValues(data: any) {\n const defaultValues: { [key: string]: any } = {};\n const columns = this.crudSchema.columns;\n\n for (const columnName in columns) {\n const missingColumnValue = !(columnName in data);\n const columnDefaultValue = this.getDefaultValue(columnName);\n if (missingColumnValue && columnDefaultValue) {\n defaultValues[columnName] = columnDefaultValue;\n }\n }\n\n return { ...defaultValues, ...data };\n }\n\n create(data: T | T[]): Promise<unknown | ICreateMultipleResponse> {\n const processedData = Array.isArray(data)\n ? data.map(this.setDefaultValues.bind(this))\n : this.setDefaultValues(data);\n\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.create(processedData),\n );\n }\n\n find(options: IFindOptions) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.find(options),\n );\n }\n\n findItem(options: IFindOptions) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findItem(options),\n );\n }\n\n update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n options: IUpdateOptions = {},\n ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.update(filters, data, options),\n );\n }\n\n upsert(\n keyColumnNames: string[],\n data: T,\n ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.upsert(keyColumnNames, data),\n );\n }\n\n remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions = {},\n ): Promise<void> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.remove(filters, options),\n );\n }\n\n findAll(options: IFindOptions) {\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\n const { pagination, ...findAllOptions } = options;\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findAll(findAllOptions),\n );\n }\n\n findCount(findCountOptions: IFindOptions): Promise<number> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findCount(findCountOptions),\n );\n }\n\n buildFilter(\n attribute: string,\n value: any,\n operator = 'EQUAL',\n relativePath = undefined,\n ) {\n return buildFilter(attribute, value, operator, relativePath);\n }\n\n buildQueryIndex(indexName: string, columns: string[]) {\n return buildQueryIndex(indexName, columns);\n }\n\n buildSort(column: string, direction: string) {\n return buildSort(column, direction);\n }\n\n updateExpression(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options?: IUpdateExpressionsOptions,\n ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.updateExpressions(filters, actions, options),\n );\n }\n\n runRawQuery(query: string, params: any[]) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.runRawQuery(query, params),\n );\n }\n}\n\nexport default CrudService;\n","import { PoolClient } from 'pg';\nimport { ITableName, ITableColumns } from '../interfaces';\n\nexport class CrudSchema {\n static table: string | ITableName;\n static columns: ITableColumns;\n static usePool?: boolean = false;\n static schema: string | null = null;\n static poolClient?: PoolClient;\n static isTemporalTable: boolean = false;\n}\n","import { FILTER_LOGIC_OPERATORS } from '../utils/constants';\n\nconst VALID_FILTER_LOGIC_OPERATORS: FILTER_LOGIC_OPERATORS[] = Object.values(\n FILTER_LOGIC_OPERATORS,\n);\n\nexport type FilterLogicOperator = (typeof VALID_FILTER_LOGIC_OPERATORS)[number];\n","import { CONNECTION_CLOSING_MODES } from '../utils/constants';\n\nconst VALID_CONNECTION_CLOSING_MODES: CONNECTION_CLOSING_MODES[] =\n Object.values(CONNECTION_CLOSING_MODES);\n\nexport type ConnectionClosingMode =\n (typeof VALID_CONNECTION_CLOSING_MODES)[number];\n","import { Pool, PoolConfig } from 'pg';\nimport { isMultiPlatformMode } from '../utils/constants';\n\nexport function getDbPool(poolConfig?: PoolConfig) {\n if (!isMultiPlatformMode()) return undefined;\n\n const pool = new Pool({\n ...poolConfig,\n connectionString: process.env.MULTIPLATFORM_PG_CONNECTION_STRING,\n });\n return pool;\n}\n"]}
|