@qrvey/data-persistence 0.3.9 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -346,6 +346,7 @@ class PostgresqlClientService extends query_service_1.default {
346
346
  updateClauses.push(`${pg_format_1.default.ident(path)} = ${expValue}`);
347
347
  }
348
348
  });
349
+ this.setCommonColumnsQueryFunctions(jsonSetExpressionGroup, queryFunctions);
349
350
  if (Object.keys(jsonSetExpressionGroup).length > 0) {
350
351
  Object.keys(jsonSetExpressionGroup).forEach((groupIndex) => {
351
352
  const jsonSetExpression = this.buildJSONBExpression(jsonSetExpressionGroup[groupIndex], 'jsonb_set');
@@ -353,16 +354,36 @@ class PostgresqlClientService extends query_service_1.default {
353
354
  });
354
355
  }
355
356
  //This is for dynamo functions transformed to postgresql functions
356
- if (queryFunctions.length > 0) {
357
- queryFunctions.forEach((queryFunction) => {
358
- updateClauses.push(`${pg_format_1.default.ident(queryFunction.path)} = ${queryFunction.value}`);
359
- });
360
- }
357
+ this.buildUpdateClausesFormDynamoFunctions(queryFunctions, updateClauses);
361
358
  query += ` ${updateClauses.join(', ')}`;
362
359
  query += ' WHERE ';
363
360
  query += this.buildFilterClause(filters);
364
361
  return this.runQuery(query);
365
362
  }
363
+ buildUpdateClausesFormDynamoFunctions(queryFunctions, updateClauses) {
364
+ if (queryFunctions.length > 0) {
365
+ queryFunctions.forEach((queryFunction) => {
366
+ if (typeof queryFunction.value == 'object') {
367
+ const jsonExpr = this.buildJSONBExpression(queryFunction.value.jsonExpression, 'jsonb_insert');
368
+ updateClauses.push(`${pg_format_1.default.ident(queryFunction.path)} = ${jsonExpr}`);
369
+ }
370
+ else {
371
+ updateClauses.push(`${pg_format_1.default.ident(queryFunction.path)} = ${queryFunction.value}`);
372
+ }
373
+ });
374
+ }
375
+ }
376
+ setCommonColumnsQueryFunctions(jsonSetExpressionGroup, queryFunctions) {
377
+ Object.keys(jsonSetExpressionGroup).forEach((jsonSetExpr) => {
378
+ queryFunctions.forEach((queryFunction, index) => {
379
+ const columnPath = `"${queryFunction.path}"`;
380
+ if (columnPath === jsonSetExpr) {
381
+ jsonSetExpressionGroup[jsonSetExpr].push(Object.assign(Object.assign({}, queryFunction), { isCommonColumn: true }));
382
+ delete queryFunctions[index];
383
+ }
384
+ });
385
+ });
386
+ }
366
387
  /**
367
388
  * @description Builds a jsonb expression like jsonb_insert, or jsonb_set
368
389
  * @param jsonSetExpressions
@@ -372,12 +393,20 @@ class PostgresqlClientService extends query_service_1.default {
372
393
  buildJSONBExpression(jsonSetExpressions, functionName) {
373
394
  let jsonSetStringExpr = '';
374
395
  jsonSetExpressions.forEach((expression, index) => {
375
- const { columnName, jsonExpr } = expression;
396
+ let _tempFunctionName = functionName;
397
+ let { columnName, jsonExpr } = expression;
398
+ //Is a common column for dynamoDBFunctions
399
+ if (expression.isCommonColumn) {
400
+ const jsonExpression = expression.value.jsonExpression[0];
401
+ _tempFunctionName = jsonExpression.functionName;
402
+ jsonExpr = jsonExpression.jsonExpr;
403
+ columnName = jsonExpression.columnName;
404
+ }
376
405
  if (index === 0) {
377
- jsonSetStringExpr = `${functionName}(${columnName},${jsonExpr})`;
406
+ jsonSetStringExpr = `${_tempFunctionName}(${columnName},${jsonExpr})`;
378
407
  }
379
408
  else {
380
- jsonSetStringExpr = `${functionName}(${jsonSetStringExpr},${jsonExpr})`;
409
+ jsonSetStringExpr = `${_tempFunctionName}(${jsonSetStringExpr},${jsonExpr})`;
381
410
  }
382
411
  });
383
412
  return jsonSetStringExpr;
@@ -427,14 +456,16 @@ class PostgresqlClientService extends query_service_1.default {
427
456
  originalString: groupResult,
428
457
  path: attributesFromGroup[0].trim(),
429
458
  value: attributesFromGroup.slice(1).join(',').trim(),
459
+ isDynamoFunction: true,
430
460
  functionExpr: '',
461
+ jsonExpression: [{}],
431
462
  };
432
463
  if (columnType == 'array') {
433
464
  attributes['functionExpr'] =
434
465
  this.buildArrayAppendExpr(attributes);
435
466
  }
436
467
  else {
437
- attributes['functionExpr'] =
468
+ attributes['jsonExpression'] =
438
469
  this.buildJsonbInsertExpr(attributes);
439
470
  }
440
471
  return attributes;
@@ -449,42 +480,61 @@ class PostgresqlClientService extends query_service_1.default {
449
480
  buildJsonbInsertExpr(params) {
450
481
  const arrayPath = params.path.split('.');
451
482
  const columnName = arrayPath.shift();
452
- const jsonbInsertExpressions = this.getExpressionsByDefinitionForJSONBInsert(columnName, params.value);
453
- const expressions = this.buildJSONBExpression(jsonbInsertExpressions, 'jsonb_insert');
454
- return expressions;
483
+ const options = {
484
+ isDynamoFunction: params === null || params === void 0 ? void 0 : params.isDynamoFunction,
485
+ relativePath: arrayPath.length && Array.isArray(arrayPath) ? arrayPath : [],
486
+ };
487
+ const jsonbInsertExpressions = this.getExpressionsByDefinitionForJSONBInsert(columnName, params.value, options);
488
+ return jsonbInsertExpressions;
455
489
  }
456
- getExpressionsByDefinitionForJSONBInsert(columnName, value) {
490
+ getExpressionsByDefinitionForJSONBInsert(columnName, value, options) {
457
491
  const jsonbInsertExpressions = [];
492
+ let pathToAffect = '0';
493
+ if (options.isDynamoFunction == true) {
494
+ options.relativePath.push('0');
495
+ pathToAffect = options.relativePath.join(',');
496
+ }
458
497
  try {
459
498
  const parsedValue = JSON.parse(value);
460
499
  if (Array.isArray(parsedValue)) {
461
500
  parsedValue.forEach((arrayValue) => {
501
+ arrayValue =
502
+ typeof arrayValue == 'string'
503
+ ? `"${arrayValue}"`
504
+ : arrayValue;
462
505
  jsonbInsertExpressions.push({
463
- jsonExpr: `'{0}','${this.serializeJSONValue(arrayValue)}'`,
506
+ jsonExpr: `'{${pathToAffect}}','${this.serializeJSONValue(arrayValue)}'`,
464
507
  columnName: `"${columnName}"`,
508
+ functionName: 'jsonb_insert',
465
509
  });
466
510
  });
467
511
  }
468
512
  else {
469
513
  jsonbInsertExpressions.push({
470
- jsonExpr: `'{0}','${this.serializeJSONValue(parsedValue)}'`,
514
+ jsonExpr: `'{${pathToAffect}}','${this.serializeJSONValue(parsedValue)}'`,
471
515
  columnName: `"${columnName}"`,
516
+ functionName: 'jsonb_insert',
472
517
  });
473
518
  }
474
519
  }
475
520
  catch (error) {
476
521
  jsonbInsertExpressions.push({
477
- jsonExpr: `'{0}','${value}'`,
522
+ jsonExpr: `'{${pathToAffect}}','${value}'`,
478
523
  columnName: `"${columnName}"`,
524
+ functionName: 'jsonb_insert',
479
525
  });
480
526
  }
481
527
  return jsonbInsertExpressions;
482
528
  }
483
529
  getInsertExprFromJsonbDef(queryValue, columnType) {
484
530
  const listAppendParams = this.getListAppendDefFromValue(queryValue, columnType);
485
- if (listAppendParams != null) {
531
+ if (listAppendParams != null &&
532
+ (listAppendParams === null || listAppendParams === void 0 ? void 0 : listAppendParams.jsonExpression.length) === 0) {
486
533
  queryValue = queryValue.replace(listAppendParams.originalString, listAppendParams.functionExpr);
487
534
  }
535
+ else {
536
+ return listAppendParams;
537
+ }
488
538
  return queryValue;
489
539
  }
490
540
  replacePathAndValueByAttributeNames(actions, options, columns, actionName) {
@@ -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":"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"}
@@ -30,7 +30,7 @@ var CrudFactory = class {
30
30
  const isMultiPlatformMode2 = ((_a = process.env.PLATFORM_TYPE) == null ? void 0 : _a.toLowerCase()) === "container";
31
31
  let DatabaseCrudService;
32
32
  if (isMultiPlatformMode2) {
33
- const module = await import('./postgreSqlCrud.service-AICIO7W3.mjs');
33
+ const module = await import('./postgreSqlCrud.service-M7PR4CN6.mjs');
34
34
  DatabaseCrudService = module.PostgreSqlCrudService;
35
35
  } else {
36
36
  const module = await import('./dynamoDbCrud.service-EFYPBZKN.mjs');
@@ -411,6 +411,10 @@ var PostgresqlClientService = class extends QueryService {
411
411
  updateClauses.push(`${format.ident(path)} = ${expValue}`);
412
412
  }
413
413
  });
414
+ this.setCommonColumnsQueryFunctions(
415
+ jsonSetExpressionGroup,
416
+ queryFunctions
417
+ );
414
418
  if (Object.keys(jsonSetExpressionGroup).length > 0) {
415
419
  Object.keys(jsonSetExpressionGroup).forEach((groupIndex) => {
416
420
  const jsonSetExpression = this.buildJSONBExpression(
@@ -420,18 +424,47 @@ var PostgresqlClientService = class extends QueryService {
420
424
  updateClauses.push(`${groupIndex} = ${jsonSetExpression}`);
421
425
  });
422
426
  }
423
- if (queryFunctions.length > 0) {
424
- queryFunctions.forEach((queryFunction) => {
425
- updateClauses.push(
426
- `${format.ident(queryFunction.path)} = ${queryFunction.value}`
427
- );
428
- });
429
- }
427
+ this.buildUpdateClausesFormDynamoFunctions(
428
+ queryFunctions,
429
+ updateClauses
430
+ );
430
431
  query += ` ${updateClauses.join(", ")}`;
431
432
  query += " WHERE ";
432
433
  query += this.buildFilterClause(filters);
433
434
  return this.runQuery(query);
434
435
  }
436
+ buildUpdateClausesFormDynamoFunctions(queryFunctions, updateClauses) {
437
+ if (queryFunctions.length > 0) {
438
+ queryFunctions.forEach((queryFunction) => {
439
+ if (typeof queryFunction.value == "object") {
440
+ const jsonExpr = this.buildJSONBExpression(
441
+ queryFunction.value.jsonExpression,
442
+ "jsonb_insert"
443
+ );
444
+ updateClauses.push(
445
+ `${format.ident(queryFunction.path)} = ${jsonExpr}`
446
+ );
447
+ } else {
448
+ updateClauses.push(
449
+ `${format.ident(queryFunction.path)} = ${queryFunction.value}`
450
+ );
451
+ }
452
+ });
453
+ }
454
+ }
455
+ setCommonColumnsQueryFunctions(jsonSetExpressionGroup, queryFunctions) {
456
+ Object.keys(jsonSetExpressionGroup).forEach((jsonSetExpr) => {
457
+ queryFunctions.forEach((queryFunction, index) => {
458
+ const columnPath = `"${queryFunction.path}"`;
459
+ if (columnPath === jsonSetExpr) {
460
+ jsonSetExpressionGroup[jsonSetExpr].push(__spreadProps(__spreadValues({}, queryFunction), {
461
+ isCommonColumn: true
462
+ }));
463
+ delete queryFunctions[index];
464
+ }
465
+ });
466
+ });
467
+ }
435
468
  /**
436
469
  * @description Builds a jsonb expression like jsonb_insert, or jsonb_set
437
470
  * @param jsonSetExpressions
@@ -441,11 +474,18 @@ var PostgresqlClientService = class extends QueryService {
441
474
  buildJSONBExpression(jsonSetExpressions, functionName) {
442
475
  let jsonSetStringExpr = "";
443
476
  jsonSetExpressions.forEach((expression, index) => {
444
- const { columnName, jsonExpr } = expression;
477
+ let _tempFunctionName = functionName;
478
+ let { columnName, jsonExpr } = expression;
479
+ if (expression.isCommonColumn) {
480
+ const jsonExpression = expression.value.jsonExpression[0];
481
+ _tempFunctionName = jsonExpression.functionName;
482
+ jsonExpr = jsonExpression.jsonExpr;
483
+ columnName = jsonExpression.columnName;
484
+ }
445
485
  if (index === 0) {
446
- jsonSetStringExpr = `${functionName}(${columnName},${jsonExpr})`;
486
+ jsonSetStringExpr = `${_tempFunctionName}(${columnName},${jsonExpr})`;
447
487
  } else {
448
- jsonSetStringExpr = `${functionName}(${jsonSetStringExpr},${jsonExpr})`;
488
+ jsonSetStringExpr = `${_tempFunctionName}(${jsonSetStringExpr},${jsonExpr})`;
449
489
  }
450
490
  });
451
491
  return jsonSetStringExpr;
@@ -494,12 +534,14 @@ var PostgresqlClientService = class extends QueryService {
494
534
  originalString: groupResult,
495
535
  path: attributesFromGroup[0].trim(),
496
536
  value: attributesFromGroup.slice(1).join(",").trim(),
497
- functionExpr: ""
537
+ isDynamoFunction: true,
538
+ functionExpr: "",
539
+ jsonExpression: [{}]
498
540
  };
499
541
  if (columnType == "array") {
500
542
  attributes["functionExpr"] = this.buildArrayAppendExpr(attributes);
501
543
  } else {
502
- attributes["functionExpr"] = this.buildJsonbInsertExpr(attributes);
544
+ attributes["jsonExpression"] = this.buildJsonbInsertExpr(attributes);
503
545
  }
504
546
  return attributes;
505
547
  }
@@ -513,39 +555,51 @@ var PostgresqlClientService = class extends QueryService {
513
555
  buildJsonbInsertExpr(params) {
514
556
  const arrayPath = params.path.split(".");
515
557
  const columnName = arrayPath.shift();
558
+ const options = {
559
+ isDynamoFunction: params == null ? void 0 : params.isDynamoFunction,
560
+ relativePath: arrayPath.length && Array.isArray(arrayPath) ? arrayPath : []
561
+ };
516
562
  const jsonbInsertExpressions = this.getExpressionsByDefinitionForJSONBInsert(
517
563
  columnName,
518
- params.value
519
- );
520
- const expressions = this.buildJSONBExpression(
521
- jsonbInsertExpressions,
522
- "jsonb_insert"
564
+ params.value,
565
+ options
523
566
  );
524
- return expressions;
567
+ return jsonbInsertExpressions;
525
568
  }
526
- getExpressionsByDefinitionForJSONBInsert(columnName, value) {
569
+ getExpressionsByDefinitionForJSONBInsert(columnName, value, options) {
527
570
  const jsonbInsertExpressions = [];
571
+ let pathToAffect = "0";
572
+ if (options.isDynamoFunction == true) {
573
+ options.relativePath.push("0");
574
+ pathToAffect = options.relativePath.join(",");
575
+ }
528
576
  try {
529
577
  const parsedValue = JSON.parse(value);
530
578
  if (Array.isArray(parsedValue)) {
531
579
  parsedValue.forEach((arrayValue) => {
580
+ arrayValue = typeof arrayValue == "string" ? `"${arrayValue}"` : arrayValue;
532
581
  jsonbInsertExpressions.push({
533
- jsonExpr: `'{0}','${this.serializeJSONValue(
582
+ jsonExpr: `'{${pathToAffect}}','${this.serializeJSONValue(
534
583
  arrayValue
535
584
  )}'`,
536
- columnName: `"${columnName}"`
585
+ columnName: `"${columnName}"`,
586
+ functionName: "jsonb_insert"
537
587
  });
538
588
  });
539
589
  } else {
540
590
  jsonbInsertExpressions.push({
541
- jsonExpr: `'{0}','${this.serializeJSONValue(parsedValue)}'`,
542
- columnName: `"${columnName}"`
591
+ jsonExpr: `'{${pathToAffect}}','${this.serializeJSONValue(
592
+ parsedValue
593
+ )}'`,
594
+ columnName: `"${columnName}"`,
595
+ functionName: "jsonb_insert"
543
596
  });
544
597
  }
545
598
  } catch (error) {
546
599
  jsonbInsertExpressions.push({
547
- jsonExpr: `'{0}','${value}'`,
548
- columnName: `"${columnName}"`
600
+ jsonExpr: `'{${pathToAffect}}','${value}'`,
601
+ columnName: `"${columnName}"`,
602
+ functionName: "jsonb_insert"
549
603
  });
550
604
  }
551
605
  return jsonbInsertExpressions;
@@ -555,11 +609,13 @@ var PostgresqlClientService = class extends QueryService {
555
609
  queryValue,
556
610
  columnType
557
611
  );
558
- if (listAppendParams != null) {
612
+ if (listAppendParams != null && (listAppendParams == null ? void 0 : listAppendParams.jsonExpression.length) === 0) {
559
613
  queryValue = queryValue.replace(
560
614
  listAppendParams.originalString,
561
615
  listAppendParams.functionExpr
562
616
  );
617
+ } else {
618
+ return listAppendParams;
563
619
  }
564
620
  return queryValue;
565
621
  }
@@ -750,4 +806,4 @@ var PostgreSqlCrudService = class extends PostgresqlClientService {
750
806
 
751
807
  export { PostgreSqlCrudService };
752
808
  //# sourceMappingURL=out.js.map
753
- //# sourceMappingURL=postgreSqlCrud.service-AICIO7W3.mjs.map
809
+ //# sourceMappingURL=postgreSqlCrud.service-M7PR4CN6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/cruds/postgresql/postgreSqlClient.service.ts","../../src/services/cruds/postgresql/connection.service.ts","../../src/services/cruds/postgresql/query.service.ts","../../src/services/cruds/postgresql/postgreSqlCrud.service.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-console */\n\nimport format from 'pg-format';\nimport { QueryResult } from 'pg';\nimport {\n AggregateFunction,\n DbPoolClient,\n FilterLogicOperator,\n} 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';\n\nexport default class PostgresqlClientService<T> extends QueryService {\n private crudSchema: typeof CrudSchema;\n constructor(tableSchema: typeof CrudSchema, poolClient?: DbPoolClient) {\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 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 = format.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 = format.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(format.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} ${format.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} ${format.literal(\n wildcardValue,\n )}`;\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 `${format.ident(sort.column)} ${\n sort.direction || SORT_DIRECTIONS.ASC\n }`;\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 ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )} (%I) VALUES %L RETURNING *;`,\n keys,\n values,\n );\n\n return this.runQuery(query);\n }\n\n private addFiltersToQuery(\n query: string,\n filters?: IFilter[] | ICompositeFilter,\n ): string {\n if (!filters) return query;\n\n const isValidArrayFilters = Array.isArray(filters) && filters?.length;\n const isValidCompositeFilters = this.isCompositeFilter(filters);\n if (isValidArrayFilters || isValidCompositeFilters)\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 async findCommand(options: IFindOptions = {}): Promise<T[]> {\n let query = `SELECT ${this.getSelectClause(\n options.aggregateFunction,\n options.fields,\n )} FROM ${format.ident(this.dbSchema)}.${format.ident(this.tableName)}`;\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 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 format.literal(value);\n }\n }\n\n async updateCommand(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<any>,\n ): Promise<QueryResult<any>> {\n let query = `UPDATE ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )} SET`;\n\n const updateClauses = Object.entries(data).map(([key, value]) => {\n const dbValue = format.literal(this.formatValue(value));\n return `${format.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 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 ${format.ident(this.dbSchema)}.${format.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 ${format.ident(this.dbSchema)}.${format.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 = format.literal(value);\n expValue = `ARRAY[${formattedValue}]`;\n break;\n default:\n formattedValue = format.literal(value);\n expValue = formattedValue;\n break;\n }\n this.crudSchema.columns;\n updateClauses.push(`${format.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 `${format.ident(queryFunction.path)} = ${jsonExpr}`,\n );\n } else {\n updateClauses.push(\n `${format.ident(queryFunction.path)} = ${\n queryFunction.value\n }`,\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","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, QueryResult } from 'pg';\nimport ConnectionService from './connection.service';\nimport { DbPoolClient } from '../../../types';\n\nexport default class QueryService {\n private connectionService: ConnectionService;\n\n constructor(private poolClient?: DbPoolClient) {\n this.connectionService = new ConnectionService();\n }\n\n async runQuery(\n queryText: string,\n values?: any[],\n ): Promise<QueryResult<any>> {\n const client = await (this.poolClient\n ? this.poolClient\n : this.connectionService.getClient());\n\n try {\n const result = await client.query(queryText, values);\n return result;\n } catch (error) {\n console.log('[Postgresql-Client] Query Execution Failed:', error);\n throw error;\n } finally {\n if (!this.poolClient)\n this.connectionService.releaseClient(client as Client);\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} 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';\nexport class PostgreSqlCrudService<T>\n extends PostgresqlClientService<T>\n implements ICrudService<T>\n{\n constructor(private tableSchema: typeof CrudSchema) {\n super(tableSchema);\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 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 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 unprocessedItems: result\n .filter((r: any) => !r.success)\n .map((r: any) => r.inputData),\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 ): Promise<any> {\n const savedRecord = await this.findItem({ filters });\n\n const inputData: any = {\n ...savedRecord,\n ...data,\n } as {\n [key: string]: any;\n };\n\n await this.updateCommand(filters, this.prepareData(inputData));\n return this.getItem(inputData);\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"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@qrvey/data-persistence",
3
3
  "types": "dist/types/index.d.ts",
4
4
  "main": "dist/cjs/index.js",
5
- "version": "0.3.9",
5
+ "version": "0.4.0",
6
6
  "license": "MIT",
7
7
  "exports": {
8
8
  ".": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/cruds/postgresql/postgreSqlClient.service.ts","../../src/services/cruds/postgresql/connection.service.ts","../../src/services/cruds/postgresql/query.service.ts","../../src/services/cruds/postgresql/postgreSqlCrud.service.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-console */\n\nimport format from 'pg-format';\nimport { QueryResult } from 'pg';\nimport {\n AggregateFunction,\n DbPoolClient,\n FilterLogicOperator,\n} 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';\n\nexport default class PostgresqlClientService<T> extends QueryService {\n private crudSchema: typeof CrudSchema;\n constructor(tableSchema: typeof CrudSchema, poolClient?: DbPoolClient) {\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 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 = format.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 = format.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(format.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} ${format.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} ${format.literal(\n wildcardValue,\n )}`;\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 `${format.ident(sort.column)} ${\n sort.direction || SORT_DIRECTIONS.ASC\n }`;\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 ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )} (%I) VALUES %L RETURNING *;`,\n keys,\n values,\n );\n\n return this.runQuery(query);\n }\n\n private addFiltersToQuery(\n query: string,\n filters?: IFilter[] | ICompositeFilter,\n ): string {\n if (!filters) return query;\n\n const isValidArrayFilters = Array.isArray(filters) && filters?.length;\n const isValidCompositeFilters = this.isCompositeFilter(filters);\n if (isValidArrayFilters || isValidCompositeFilters)\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 async findCommand(options: IFindOptions = {}): Promise<T[]> {\n let query = `SELECT ${this.getSelectClause(\n options.aggregateFunction,\n options.fields,\n )} FROM ${format.ident(this.dbSchema)}.${format.ident(this.tableName)}`;\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 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 format.literal(value);\n }\n }\n\n async updateCommand(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<any>,\n ): Promise<QueryResult<any>> {\n let query = `UPDATE ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )} SET`;\n\n const updateClauses = Object.entries(data).map(([key, value]) => {\n const dbValue = format.literal(this.formatValue(value));\n return `${format.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 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 ${format.ident(this.dbSchema)}.${format.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 ${format.ident(this.dbSchema)}.${format.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 = format.literal(value);\n expValue = `ARRAY[${formattedValue}]`;\n break;\n default:\n formattedValue = format.literal(value);\n expValue = formattedValue;\n break;\n }\n this.crudSchema.columns;\n updateClauses.push(`${format.ident(path)} = ${expValue}`);\n }\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 if (queryFunctions.length > 0) {\n queryFunctions.forEach((queryFunction: any) => {\n updateClauses.push(\n `${format.ident(queryFunction.path)} = ${\n queryFunction.value\n }`,\n );\n });\n }\n\n query += ` ${updateClauses.join(', ')}`;\n\n query += ' WHERE ';\n query += this.buildFilterClause(filters);\n\n return this.runQuery(query);\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 const { columnName, jsonExpr } = expression;\n if (index === 0) {\n jsonSetStringExpr = `${functionName}(${columnName},${jsonExpr})`;\n } else {\n jsonSetStringExpr = `${functionName}(${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 functionExpr: '',\n };\n if (columnType == 'array') {\n attributes['functionExpr'] =\n this.buildArrayAppendExpr(attributes);\n } else {\n attributes['functionExpr'] =\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 jsonbInsertExpressions =\n this.getExpressionsByDefinitionForJSONBInsert(\n columnName,\n params.value,\n );\n\n const expressions = this.buildJSONBExpression(\n jsonbInsertExpressions,\n 'jsonb_insert',\n );\n return expressions;\n }\n\n private getExpressionsByDefinitionForJSONBInsert(\n columnName: string,\n value: string,\n ) {\n const jsonbInsertExpressions = [];\n try {\n const parsedValue = JSON.parse(value);\n if (Array.isArray(parsedValue)) {\n parsedValue.forEach((arrayValue) => {\n jsonbInsertExpressions.push({\n jsonExpr: `'{0}','${this.serializeJSONValue(\n arrayValue,\n )}'`,\n columnName: `\"${columnName}\"`,\n });\n });\n } else {\n jsonbInsertExpressions.push({\n jsonExpr: `'{0}','${this.serializeJSONValue(parsedValue)}'`,\n columnName: `\"${columnName}\"`,\n });\n }\n } catch (error) {\n jsonbInsertExpressions.push({\n jsonExpr: `'{0}','${value}'`,\n columnName: `\"${columnName}\"`,\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 (listAppendParams != null) {\n queryValue = queryValue.replace(\n listAppendParams.originalString,\n listAppendParams.functionExpr,\n );\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","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, QueryResult } from 'pg';\nimport ConnectionService from './connection.service';\nimport { DbPoolClient } from '../../../types';\n\nexport default class QueryService {\n private connectionService: ConnectionService;\n\n constructor(private poolClient?: DbPoolClient) {\n this.connectionService = new ConnectionService();\n }\n\n async runQuery(\n queryText: string,\n values?: any[],\n ): Promise<QueryResult<any>> {\n const client = await (this.poolClient\n ? this.poolClient\n : this.connectionService.getClient());\n\n try {\n const result = await client.query(queryText, values);\n return result;\n } catch (error) {\n console.log('[Postgresql-Client] Query Execution Failed:', error);\n throw error;\n } finally {\n if (!this.poolClient)\n this.connectionService.releaseClient(client as Client);\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} 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';\nexport class PostgreSqlCrudService<T>\n extends PostgresqlClientService<T>\n implements ICrudService<T>\n{\n constructor(private tableSchema: typeof CrudSchema) {\n super(tableSchema);\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 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 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 unprocessedItems: result\n .filter((r: any) => !r.success)\n .map((r: any) => r.inputData),\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 ): Promise<any> {\n const savedRecord = await this.findItem({ filters });\n\n const inputData: any = {\n ...savedRecord,\n ...data,\n } as {\n [key: string]: any;\n };\n\n await this.updateCommand(filters, this.prepareData(inputData));\n return this.getItem(inputData);\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"]}