@qrvey/data-persistence 0.5.19-905 → 0.5.21-1012
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/services/cruds/dynamodb/queryBuilderCondition.service.js +9 -0
- package/dist/cjs/services/cruds/dynamodb/queryBuilderCondition.service.js.map +1 -1
- package/dist/cjs/services/dbPool.service.js +2 -0
- package/dist/cjs/services/dbPool.service.js.map +1 -1
- package/dist/cjs/utils/constants.js +2 -0
- package/dist/cjs/utils/constants.js.map +1 -1
- package/dist/esm/index.mjs +19 -1
- package/dist/esm/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -75,6 +75,15 @@ class QueryBuilderConditionService {
|
|
|
75
75
|
this.setExpression(expression);
|
|
76
76
|
return this.query;
|
|
77
77
|
}
|
|
78
|
+
notIn(keyValue) {
|
|
79
|
+
const keyValues = Array.isArray(keyValue) ? keyValue : [keyValue];
|
|
80
|
+
const { key, value } = this.generateKeyValue(keyValues);
|
|
81
|
+
let expression = `${key} NOT IN (${value})`;
|
|
82
|
+
if (this.tempLogicOperator)
|
|
83
|
+
expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };
|
|
84
|
+
this.setExpression(expression);
|
|
85
|
+
return this.query;
|
|
86
|
+
}
|
|
78
87
|
beginsWith(keyValue) {
|
|
79
88
|
const { key, value } = this.generateKeyValue(keyValue);
|
|
80
89
|
let expression = `begins_with(${key}, ${value})`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilderCondition.service.js","sourceRoot":"","sources":["../../../../../src/services/cruds/dynamodb/queryBuilderCondition.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"queryBuilderCondition.service.js","sourceRoot":"","sources":["../../../../../src/services/cruds/dynamodb/queryBuilderCondition.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ exports.DEFAULT_DB_POOL_CONFIG = {
|
|
|
10
10
|
connectionTimeoutMillis: 10 * 1000,
|
|
11
11
|
idleTimeoutMillis: 30 * 1000 /** DB cluster's idle timeout is 60 s */,
|
|
12
12
|
keepAlive: true,
|
|
13
|
+
keepAliveInitialDelayMillis: 10 * 1000,
|
|
14
|
+
allowExitOnIdle: !!process.env.MULTIPLATFORM_PG_ALLOW_EXIT_ON_IDLE || false,
|
|
13
15
|
};
|
|
14
16
|
function getDbPool(poolConfig) {
|
|
15
17
|
if (!(0, constants_1.isMultiPlatformMode)())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dbPool.service.js","sourceRoot":"","sources":["../../../src/services/dbPool.service.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"dbPool.service.js","sourceRoot":"","sources":["../../../src/services/dbPool.service.ts"],"names":[],"mappings":";;;AAaA,8BAsBC;AAnCD,2BAAsC;AACtC,kDAA6E;AAC7E,6DAAoD;AAEvC,QAAA,sBAAsB,GAAe;IAC9C,GAAG,EAAE,EAAE;IACP,uBAAuB,EAAE,EAAE,GAAG,IAAI;IAClC,iBAAiB,EAAE,EAAE,GAAG,IAAI,CAAC,wCAAwC;IACrE,SAAS,EAAE,IAAI;IACf,2BAA2B,EAAE,EAAE,GAAG,IAAI;IACtC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,KAAK;CAC9E,CAAC;AAEF,SAAgB,SAAS,CAAC,UAAuB;IAC7C,IAAI,CAAC,IAAA,+BAAmB,GAAE;QAAE,OAAO,SAAS,CAAC;IAE7C,MAAM,IAAI,GAAG,IAAI,SAAI,+CACd,8BAAsB,KACzB,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAChE,gBAAgB,EAAE,IAAA,8BAAkB,GAAE,KACnC,UAAU,CAAC,gCAAgC,EAChD,CAAC;IAEH,IAAA,iCAAY,EAAC,IAAI,CAAC,CAAC;IAEnB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;QAC9B,8EAA8E;QAC9E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC;QACvH,OAAO,CAAC,KAAK,CACT,GAAG,WAAW,0CAA0C,EACxD,KAAK,CACR,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -10,6 +10,7 @@ exports.FILTER_OPERATOR_MAP = {
|
|
|
10
10
|
STARTS_WITH: 'beginsWith',
|
|
11
11
|
NOT_EQUAL: 'notEq',
|
|
12
12
|
IN: 'in',
|
|
13
|
+
NOT_IN: 'notIn',
|
|
13
14
|
GREATER_THAN: 'gt',
|
|
14
15
|
GT: 'gt',
|
|
15
16
|
GREATER_THAN_EQUAL: 'gte',
|
|
@@ -68,6 +69,7 @@ exports.POSTGRES_FILTER_OPERATOR_MAP = {
|
|
|
68
69
|
LESS_THAN: '<',
|
|
69
70
|
LT: '<',
|
|
70
71
|
IN: 'IN',
|
|
72
|
+
NOT_IN: 'NOT IN',
|
|
71
73
|
STARTS_WITH: 'LIKE',
|
|
72
74
|
CONTAINS: 'LIKE',
|
|
73
75
|
NOT_CONTAINS: 'NOT LIKE',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -52,6 +52,7 @@ var FILTER_OPERATOR_MAP = {
|
|
|
52
52
|
STARTS_WITH: "beginsWith",
|
|
53
53
|
NOT_EQUAL: "notEq",
|
|
54
54
|
IN: "in",
|
|
55
|
+
NOT_IN: "notIn",
|
|
55
56
|
GREATER_THAN: "gt",
|
|
56
57
|
GT: "gt",
|
|
57
58
|
GREATER_THAN_EQUAL: "gte",
|
|
@@ -105,6 +106,7 @@ var POSTGRES_FILTER_OPERATOR_MAP = {
|
|
|
105
106
|
LESS_THAN: "<",
|
|
106
107
|
LT: "<",
|
|
107
108
|
IN: "IN",
|
|
109
|
+
NOT_IN: "NOT IN",
|
|
108
110
|
STARTS_WITH: "LIKE",
|
|
109
111
|
CONTAINS: "LIKE",
|
|
110
112
|
NOT_CONTAINS: "NOT LIKE",
|
|
@@ -407,6 +409,20 @@ var _QueryBuilderConditionService = class _QueryBuilderConditionService {
|
|
|
407
409
|
this.setExpression(expression);
|
|
408
410
|
return this.query;
|
|
409
411
|
}
|
|
412
|
+
notIn(keyValue) {
|
|
413
|
+
const keyValues = Array.isArray(keyValue) ? keyValue : [
|
|
414
|
+
keyValue
|
|
415
|
+
];
|
|
416
|
+
const { key, value } = this.generateKeyValue(keyValues);
|
|
417
|
+
let expression = `${key} NOT IN (${value})`;
|
|
418
|
+
if (this.tempLogicOperator) expression = {
|
|
419
|
+
expression,
|
|
420
|
+
logicOperator: this.tempLogicOperator,
|
|
421
|
+
config: this.config
|
|
422
|
+
};
|
|
423
|
+
this.setExpression(expression);
|
|
424
|
+
return this.query;
|
|
425
|
+
}
|
|
410
426
|
beginsWith(keyValue) {
|
|
411
427
|
const { key, value } = this.generateKeyValue(keyValue);
|
|
412
428
|
let expression = `begins_with(${key}, ${value})`;
|
|
@@ -2013,7 +2029,9 @@ var DEFAULT_DB_POOL_CONFIG = {
|
|
|
2013
2029
|
max: 20,
|
|
2014
2030
|
connectionTimeoutMillis: 10 * 1e3,
|
|
2015
2031
|
idleTimeoutMillis: 30 * 1e3,
|
|
2016
|
-
keepAlive: true
|
|
2032
|
+
keepAlive: true,
|
|
2033
|
+
keepAliveInitialDelayMillis: 10 * 1e3,
|
|
2034
|
+
allowExitOnIdle: !!process.env.MULTIPLATFORM_PG_ALLOW_EXIT_ON_IDLE || false
|
|
2017
2035
|
};
|
|
2018
2036
|
function getDbPool(poolConfig) {
|
|
2019
2037
|
if (!isMultiPlatformMode()) return void 0;
|
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/connectionRegistry.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/services/dbPool.service.ts"],"names":["FILTER_OPERATOR_MAP","CONTAINS","NOT_CONTAINS","EQUAL","STARTS_WITH","NOT_EQUAL","IN","GREATER_THAN","GT","GREATER_THAN_EQUAL","GTE","LESS_THAN","LT","LESS_THAN_EQUAL","LTE","EXIST","NOT_EXIST","BETWEEN","DYNAMODB_OPERATORS","SORT_DIRECTIONS","FILTER_LOGIC_OPERATORS","FilterOperator","POSTGRES_FILTER_OPERATOR_MAP","DEFAULT_PG_SCHEMA","AGGREGATE_FUNCTIONS","DYNAMO_DB_UPDATE_ACTIONS","SET","ADD","DELETE","REMOVE","isMultiPlatformMode","_a","process","env","PLATFORM_TYPE","toLowerCase","getConnectionAlias","PG_CONNECTION_ALIAS","HOSTNAME","SERVICE_NAME","buildFilter","attribute","value","operator","relativePath","undefined","buildQueryIndex","indexName","columns","buildSort","column","direction","ASC","AWS_REGION","AWS_DEFAULT_REGION","DynamoDbClientService","constructor","tableName","dynamoDBClient","Error","client","DynamoDBClient","region","DynamoDBDocumentClient","from","marshallOptions","removeUndefinedValues","getByKey","keyObject","options","params","TableName","Key","result","send","GetCommand","Item","query","QueryCommand","$metadata","scan","input","command","ScanCommand","response","put","ReturnValues","PutCommand","update","UpdateCommand","remove","DeleteCommand","batchWrittenPut","data","putRequests","map","item","PutRequest","RequestItems","insertCommand","BatchWriteCommand","buildDeleteRequestKeys","filters","deleteRequestKeys","forEach","filter","batchRemove","filterGroups","length","deleteRequests","filterGroup","DeleteRequest","updateExpressions","METHOD_TO_QUERY","buildAggFunctionAlias","aggregateFunction","QueryBuilderConditionService","queryFrom","tempKey","tempLogicOperator","config","wheres","updates","attributeNames","attributeValues","get","build","setKey","key","setTmpLogicOp","logicOp","setConfig","methodName","eq","keyValue","generateKeyValue","expression","logicOperator","setExpression","notEq","contains","notContains","in","keyValues","Array","isArray","beginsWith","project","gt","gte","lte","lt","attribute_exists","attribute_not_exists","between","isValidValues","push","separatorCharacter","omitAttributeValues","keyExpression","valueExpressions","val","index","valueExpression","i","Object","entries","join","keyConditionExpression","filterExpression","openExpression","replace","parentKey","closeExpression","values","QueryBuilderService","useScan","condition","limit","num","Limit","usingIndex","IndexName","ascending","ScanIndexForward","descending","startKey","lastEvaluatedKey","ExclusiveStartKey","projection","fields","field","ProjectionExpression","where","keyName","consistentRead","ConsistentRead","count","Select","COUNT","getTableColumnNames","keys","findIdColumnName","find","columnName","columnId","getTableName","table","property","name","alias","getPrimaryKeyColumns","primary","NoRecordsAffectedException","logError","context","err","message","String","stack","serviceName","console","error","PersistenceErrorWrapper","queryResult","dynamoNoRecordsAffectedExceptions","includes","rowCount","DynamoDbCrudService","tableSchema","dynamoDbClientService","idColumnName","defaultPrimaryKeys","create","unprocessedItems","UnprocessedItems","runQuery","queryCommand","applySorting","sorting","applyPagination","pagination","applyFilters","fetchResults","then","res","_b","items","results","rowsCount","fetchBatch","rows","Items","concat","LastEvaluatedKey","Count","isNotEmptyObject","encryptedLastEvaluatedKey","encryptPaginationKey","decryptPaginationKey","findAll","allResults","findCount","findOptions","buildFindItemQuery","findItem","throwErrorIfNull","applyWhereFilter","toUpperCase","applyFilterFilter","applySimpleFilters","applyCompoundFilters","queryIndexColumns","defaultWhereProperties","whereProperties","isWhereProperty","buildFilterExpression","compositeFilters","isCompositeFilter","newOptions","simpleFilter","sortIndex","obj","jsonKey","JSON","stringify","Buffer","toString","encodedKey","decodedKey","parse","savedRecord","skipFindItems","newData","returnRowsAffected","upsert","keyColumnNames","reduce","actions","runRawQuery","queryObject","primaryKeys","action","actionUpdateExpression","dbParams","UpdateExpression","ExpressionAttributeValues","ExpressionAttributeNames","FilterExpression","sanitizedAttribute","valueName","updateExprOptions","returnValues","expressionAttributeNames","expressionAttributeValues","actionType","actionUpdateExpressions","path","poolRegistry","Set","clientRegistry","shutdown","signal","poolCount","size","clientCount","log","closeAllClients","closeAllPools","pools","clear","Promise","allSettled","pool","end","status","reason","clients","registerPool","add","catch","e","registerClient","unregisterClient","delete","ConnectionService","connectionString","MULTIPLATFORM_PG_CONNECTION_STRING","getClient","Client","application_name","connect","releaseClient","QueryService","connectionService","queryText","NODE_ENV","info","release","PostgresqlClientService","poolClient","crudSchema","dbSchema","schema","isTemporalTable","getWildcardValue","buildClause","formattedValue","literal","postgresOperator","filterProperty","ident","columnExists","columnType","type","attributePath","split","comparisonValueType","getValueTypeAsPostgresDefinition","formattedValues","filterValue","filterString","wildcardValue","buildFilterClause","filterClauses","AND","buildQueryByClause","isFirstFilter","clause","formatOrderByItem","sort","buildOrderByClause","querySorting","formatArray","array","isNumberArray","formatValue","createCommand","format","isValidFiltersInput","isValidArrayFilters","isValidCompositeFilters","replaceFilterTokensInQuery","filterClause","addFiltersToQuery","addOrderByToQuery","orderBy","addPaginationToQuery","getSelectClause","parseFields","columnsFromSchema","attributes","indexOf","resolveWithQueries","rawWith","withQueries","withQuery","getRawWithClause","rawWithClause","getQueryFrom","findCommand","sanitizeValue","formattedArray","updateCommand","updateClauses","dbValue","upsertCommand","columnNames","buildFilterClauseForFilterGroups","deleteCommand","useFilterGroups","updateExpressionCommand","set","setValues","replacePathAndValueByAttributeNames","addValues","setValuesAndAddValues","jsonSetExpressionGroup","queryFunctions","createNewColumn","actionName","dynamoFuncName","jsonExpr","getJSONBSetExpressionByAction","expValue","setObjProperty","valueSerialized","setCommonColumnsQueryFunctions","groupIndex","jsonSetExpression","buildJSONBExpression","buildUpdateClausesFormDynamoFunctions","queryFunction","jsonExpression","jsonSetExpr","columnPath","isCommonColumn","jsonSetExpressions","functionName","jsonSetStringExpr","_tempFunctionName","serializeJSONValue","pathSplitted","parentPath","pathSerialized","slice","isNaN","resultExpr","getListAppendDefFromValue","queryValue","regexListAppend","listAppendString","matchList","match","groupResult","attributesFromGroup","originalString","trim","isDynamoFunction","functionExpr","buildArrayAppendExpr","buildJsonbInsertExpr","arrayPath","shift","jsonbInsertExpressions","getExpressionsByDefinitionForJSONBInsert","pathToAffect","parsedValue","arrayValue","getInsertExprFromJsonbDef","listAppendParams","replaceExpressionAttributeNames","replaceExpressionAttributeValuesForDynamoFunctions","replaceExpressionAttributeValues","exprAttributeNamesKeys","exprAttributeValuesKeys","exprAttribute","attributeName","attributeNameValue","PostgreSqlCrudService","normalizeInputData","inputData","qvAttributes","getItem","schemaColumns","Number","resultItem","prepareData","buildCreateResponseBatch","r","inputDataArray","processQueryResult","omitPagination","row","hasMoreRecords","newFrom","aggFunctionProperty","querySentence","CrudFactory","databaseClientService","CrudService","getCrudServiceInstance","crudService","getDefaultValue","default","setDefaultValues","defaultValues","missingColumnValue","columnDefaultValue","processedData","bind","findAllOptions","findCountOptions","updateExpression","CrudSchema","usePool","DEFAULT_DB_POOL_CONFIG","max","connectionTimeoutMillis","idleTimeoutMillis","keepAlive","getDbPool","poolConfig","Pool","on"],"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\nexport function getConnectionAlias(): string {\n return process.env.PG_CONNECTION_ALIAS || process.env.HOSTNAME || process.env.SERVICE_NAME || 'qrvey-service';\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 logError(context: string, err: unknown): void {\n const message = err instanceof Error ? err.message : String(err);\n const stack = err instanceof Error ? err.stack : undefined;\n const serviceName = process.env.SERVICE_NAME ? `[${process.env.SERVICE_NAME}/data-persistence]` : '[data-persistence]';\n console.error(`${serviceName} ${context}:`, message);\n if (stack) console.error(stack);\n}\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, Pool } from 'pg';\nimport { logError } from '../helpers/errorHelper';\n\nconst poolRegistry = new Set<Pool>();\nconst clientRegistry = new Set<Client>();\n\n// Call this while handling SIGINT or SIGTERM. It will resolve once all connections are closed.\nexport async function shutdown(signal: string): Promise<void> {\n const poolCount = poolRegistry.size;\n const clientCount = clientRegistry.size;\n\n let serviceName = process.env.SERVICE_NAME ? `[${process.env.SERVICE_NAME}/data-persistence]` : '[data-persistence]';\n console.log(\n `${serviceName} ${signal} received, closing ${poolCount} pool(s) and ${clientCount} client(s)...`,\n );\n try {\n await closeAllClients();\n await closeAllPools();\n console.log(`${serviceName} All connections closed`);\n } catch (err) {\n logError('Unexpected error during shutdown', err);\n }\n}\n\nexport async function closeAllPools(): Promise<void> {\n const pools = [...poolRegistry];\n poolRegistry.clear();\n const results = await Promise.allSettled(pools.map((pool) => pool.end()));\n results.forEach((result, i) => {\n if (result.status === 'rejected') {\n logError(`Pool[${i}] failed to close`, result.reason);\n }\n });\n}\n\nexport async function closeAllClients(): Promise<void> {\n const clients = [...clientRegistry];\n clientRegistry.clear();\n const results = await Promise.allSettled(\n clients.map((client) => client.end()),\n );\n results.forEach((result, i) => {\n if (result.status === 'rejected') {\n logError(`Client[${i}] failed to close`, result.reason);\n }\n });\n}\n\nexport function registerPool(pool: Pool): void {\n if (!pool) return;\n try {\n poolRegistry.add(pool);\n } catch (err) {\n logError('Failed to register pool, closing pool', err);\n void pool\n .end()\n .catch((e) => logError('pool.end failed during rollback', e));\n throw err;\n }\n}\n\nexport function registerClient(client: Client): void {\n if (!client) return;\n try {\n clientRegistry.add(client);\n } catch (err) {\n logError('Failed to register client, closing client', err);\n void client\n .end()\n .catch((e) => logError('client.end failed during rollback', e));\n throw err;\n }\n}\n\nexport function unregisterClient(client: Client): void {\n try {\n clientRegistry.delete(client);\n } catch (err) {\n logError('Failed to unregister client', err);\n }\n}\n","import { Client } from 'pg';\nimport { logError } from '../../../helpers/errorHelper';\nimport { getConnectionAlias } from '../../../utils/constants';\nimport { registerClient, unregisterClient } from '../../connectionRegistry';\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 application_name: getConnectionAlias(),\n });\n await client.connect();\n registerClient(client);\n return client;\n }\n\n releaseClient(client: Client): void {\n try {\n unregisterClient(client);\n } catch (err) {\n logError('Error unregistering client', err);\n }\n void client\n .end()\n .catch((e) => logError('client.end failed during release', e));\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 const serviceName = process.env.SERVICE_NAME ? `[${process.env.SERVICE_NAME}/data-persistence]` : '[data-persistence]';\n console.info(`${serviceName} Query as Text:`, queryText);\n }\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 { Pool, PoolConfig } from 'pg';\nimport { getConnectionAlias, isMultiPlatformMode } from '../utils/constants';\nimport { registerPool } from './connectionRegistry';\n\nexport const DEFAULT_DB_POOL_CONFIG: PoolConfig = {\n max: 20,\n connectionTimeoutMillis: 10 * 1000,\n idleTimeoutMillis: 30 * 1000 /** DB cluster's idle timeout is 60 s */,\n keepAlive: true,\n};\n\nexport function getDbPool(poolConfig?: PoolConfig) {\n if (!isMultiPlatformMode()) return undefined;\n\n const pool = new Pool({\n ...DEFAULT_DB_POOL_CONFIG,\n connectionString: process.env.MULTIPLATFORM_PG_CONNECTION_STRING,\n application_name: getConnectionAlias(),\n ...poolConfig /** Custom implementer config */,\n });\n\n registerPool(pool);\n\n pool.on('error', (error: Error) => {\n /** Prevent idle-client connection drops from becoming uncaught exceptions. */\n const serviceName = process.env.SERVICE_NAME ? `[${process.env.SERVICE_NAME}/data-persistence]` : '[data-persistence]';\n console.error(\n `${serviceName} Unexpected PG pool error on idle client`,\n error,\n );\n });\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/connectionRegistry.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/services/dbPool.service.ts"],"names":["FILTER_OPERATOR_MAP","CONTAINS","NOT_CONTAINS","EQUAL","STARTS_WITH","NOT_EQUAL","IN","NOT_IN","GREATER_THAN","GT","GREATER_THAN_EQUAL","GTE","LESS_THAN","LT","LESS_THAN_EQUAL","LTE","EXIST","NOT_EXIST","BETWEEN","DYNAMODB_OPERATORS","SORT_DIRECTIONS","FILTER_LOGIC_OPERATORS","FilterOperator","POSTGRES_FILTER_OPERATOR_MAP","DEFAULT_PG_SCHEMA","AGGREGATE_FUNCTIONS","DYNAMO_DB_UPDATE_ACTIONS","SET","ADD","DELETE","REMOVE","isMultiPlatformMode","_a","process","env","PLATFORM_TYPE","toLowerCase","getConnectionAlias","PG_CONNECTION_ALIAS","HOSTNAME","SERVICE_NAME","buildFilter","attribute","value","operator","relativePath","undefined","buildQueryIndex","indexName","columns","buildSort","column","direction","ASC","AWS_REGION","AWS_DEFAULT_REGION","DynamoDbClientService","constructor","tableName","dynamoDBClient","Error","client","DynamoDBClient","region","DynamoDBDocumentClient","from","marshallOptions","removeUndefinedValues","getByKey","keyObject","options","params","TableName","Key","result","send","GetCommand","Item","query","QueryCommand","$metadata","scan","input","command","ScanCommand","response","put","ReturnValues","PutCommand","update","UpdateCommand","remove","DeleteCommand","batchWrittenPut","data","putRequests","map","item","PutRequest","RequestItems","insertCommand","BatchWriteCommand","buildDeleteRequestKeys","filters","deleteRequestKeys","forEach","filter","batchRemove","filterGroups","length","deleteRequests","filterGroup","DeleteRequest","updateExpressions","METHOD_TO_QUERY","buildAggFunctionAlias","aggregateFunction","QueryBuilderConditionService","queryFrom","tempKey","tempLogicOperator","config","wheres","updates","attributeNames","attributeValues","get","build","setKey","key","setTmpLogicOp","logicOp","setConfig","methodName","eq","keyValue","generateKeyValue","expression","logicOperator","setExpression","notEq","contains","notContains","in","keyValues","Array","isArray","notIn","beginsWith","project","gt","gte","lte","lt","attribute_exists","attribute_not_exists","between","isValidValues","push","separatorCharacter","omitAttributeValues","keyExpression","valueExpressions","val","index","valueExpression","i","Object","entries","join","keyConditionExpression","filterExpression","openExpression","replace","parentKey","closeExpression","values","QueryBuilderService","useScan","condition","limit","num","Limit","usingIndex","IndexName","ascending","ScanIndexForward","descending","startKey","lastEvaluatedKey","ExclusiveStartKey","projection","fields","field","ProjectionExpression","where","keyName","consistentRead","ConsistentRead","count","Select","COUNT","getTableColumnNames","keys","findIdColumnName","find","columnName","columnId","getTableName","table","property","name","alias","getPrimaryKeyColumns","primary","NoRecordsAffectedException","logError","context","err","message","String","stack","serviceName","console","error","PersistenceErrorWrapper","queryResult","dynamoNoRecordsAffectedExceptions","includes","rowCount","DynamoDbCrudService","tableSchema","dynamoDbClientService","idColumnName","defaultPrimaryKeys","create","unprocessedItems","UnprocessedItems","runQuery","queryCommand","applySorting","sorting","applyPagination","pagination","applyFilters","fetchResults","then","res","_b","items","results","rowsCount","fetchBatch","rows","Items","concat","LastEvaluatedKey","Count","isNotEmptyObject","encryptedLastEvaluatedKey","encryptPaginationKey","decryptPaginationKey","findAll","allResults","findCount","findOptions","buildFindItemQuery","findItem","throwErrorIfNull","applyWhereFilter","toUpperCase","applyFilterFilter","applySimpleFilters","applyCompoundFilters","queryIndexColumns","defaultWhereProperties","whereProperties","isWhereProperty","buildFilterExpression","compositeFilters","isCompositeFilter","newOptions","simpleFilter","sortIndex","obj","jsonKey","JSON","stringify","Buffer","toString","encodedKey","decodedKey","parse","savedRecord","skipFindItems","newData","returnRowsAffected","upsert","keyColumnNames","reduce","actions","runRawQuery","queryObject","primaryKeys","action","actionUpdateExpression","dbParams","UpdateExpression","ExpressionAttributeValues","ExpressionAttributeNames","FilterExpression","sanitizedAttribute","valueName","updateExprOptions","returnValues","expressionAttributeNames","expressionAttributeValues","actionType","actionUpdateExpressions","path","poolRegistry","Set","clientRegistry","shutdown","signal","poolCount","size","clientCount","log","closeAllClients","closeAllPools","pools","clear","Promise","allSettled","pool","end","status","reason","clients","registerPool","add","catch","e","registerClient","unregisterClient","delete","ConnectionService","connectionString","MULTIPLATFORM_PG_CONNECTION_STRING","getClient","Client","application_name","connect","releaseClient","QueryService","connectionService","queryText","NODE_ENV","info","release","PostgresqlClientService","poolClient","crudSchema","dbSchema","schema","isTemporalTable","getWildcardValue","buildClause","formattedValue","literal","postgresOperator","filterProperty","ident","columnExists","columnType","type","attributePath","split","comparisonValueType","getValueTypeAsPostgresDefinition","formattedValues","filterValue","filterString","wildcardValue","buildFilterClause","filterClauses","AND","buildQueryByClause","isFirstFilter","clause","formatOrderByItem","sort","buildOrderByClause","querySorting","formatArray","array","isNumberArray","formatValue","createCommand","format","isValidFiltersInput","isValidArrayFilters","isValidCompositeFilters","replaceFilterTokensInQuery","filterClause","addFiltersToQuery","addOrderByToQuery","orderBy","addPaginationToQuery","getSelectClause","parseFields","columnsFromSchema","attributes","indexOf","resolveWithQueries","rawWith","withQueries","withQuery","getRawWithClause","rawWithClause","getQueryFrom","findCommand","sanitizeValue","formattedArray","updateCommand","updateClauses","dbValue","upsertCommand","columnNames","buildFilterClauseForFilterGroups","deleteCommand","useFilterGroups","updateExpressionCommand","set","setValues","replacePathAndValueByAttributeNames","addValues","setValuesAndAddValues","jsonSetExpressionGroup","queryFunctions","createNewColumn","actionName","dynamoFuncName","jsonExpr","getJSONBSetExpressionByAction","expValue","setObjProperty","valueSerialized","setCommonColumnsQueryFunctions","groupIndex","jsonSetExpression","buildJSONBExpression","buildUpdateClausesFormDynamoFunctions","queryFunction","jsonExpression","jsonSetExpr","columnPath","isCommonColumn","jsonSetExpressions","functionName","jsonSetStringExpr","_tempFunctionName","serializeJSONValue","pathSplitted","parentPath","pathSerialized","slice","isNaN","resultExpr","getListAppendDefFromValue","queryValue","regexListAppend","listAppendString","matchList","match","groupResult","attributesFromGroup","originalString","trim","isDynamoFunction","functionExpr","buildArrayAppendExpr","buildJsonbInsertExpr","arrayPath","shift","jsonbInsertExpressions","getExpressionsByDefinitionForJSONBInsert","pathToAffect","parsedValue","arrayValue","getInsertExprFromJsonbDef","listAppendParams","replaceExpressionAttributeNames","replaceExpressionAttributeValuesForDynamoFunctions","replaceExpressionAttributeValues","exprAttributeNamesKeys","exprAttributeValuesKeys","exprAttribute","attributeName","attributeNameValue","PostgreSqlCrudService","normalizeInputData","inputData","qvAttributes","getItem","schemaColumns","Number","resultItem","prepareData","buildCreateResponseBatch","r","inputDataArray","processQueryResult","omitPagination","row","hasMoreRecords","newFrom","aggFunctionProperty","querySentence","CrudFactory","databaseClientService","CrudService","getCrudServiceInstance","crudService","getDefaultValue","default","setDefaultValues","defaultValues","missingColumnValue","columnDefaultValue","processedData","bind","findAllOptions","findCountOptions","updateExpression","CrudSchema","usePool","DEFAULT_DB_POOL_CONFIG","max","connectionTimeoutMillis","idleTimeoutMillis","keepAlive","keepAliveInitialDelayMillis","allowExitOnIdle","MULTIPLATFORM_PG_ALLOW_EXIT_ON_IDLE","getDbPool","poolConfig","Pool","on"],"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 NOT_IN: 'notIn',\n GREATER_THAN: 'gt',\n GT: 'gt',\n GREATER_THAN_EQUAL: 'gte',\n GTE: 'gte',\n LESS_THAN: 'lt',\n LT: 'lt',\n\n LESS_THAN_EQUAL: 'lte',\n LTE: 'lte',\n EXIST: 'attribute_exists',\n NOT_EXIST: 'attribute_not_exists',\n BETWEEN: 'between',\n};\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 NOT_IN: 'NOT 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\nexport function getConnectionAlias(): string {\n return process.env.PG_CONNECTION_ALIAS || process.env.HOSTNAME || process.env.SERVICE_NAME || 'qrvey-service';\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 notIn(keyValue: any) {\n const keyValues = Array.isArray(keyValue) ? keyValue : [keyValue];\n const { key, value } = this.generateKeyValue(keyValues);\n let expression: any = `${key} NOT 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 logError(context: string, err: unknown): void {\n const message = err instanceof Error ? err.message : String(err);\n const stack = err instanceof Error ? err.stack : undefined;\n const serviceName = process.env.SERVICE_NAME ? `[${process.env.SERVICE_NAME}/data-persistence]` : '[data-persistence]';\n console.error(`${serviceName} ${context}:`, message);\n if (stack) console.error(stack);\n}\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, Pool } from 'pg';\nimport { logError } from '../helpers/errorHelper';\n\nconst poolRegistry = new Set<Pool>();\nconst clientRegistry = new Set<Client>();\n\n// Call this while handling SIGINT or SIGTERM. It will resolve once all connections are closed.\nexport async function shutdown(signal: string): Promise<void> {\n const poolCount = poolRegistry.size;\n const clientCount = clientRegistry.size;\n\n let serviceName = process.env.SERVICE_NAME ? `[${process.env.SERVICE_NAME}/data-persistence]` : '[data-persistence]';\n console.log(\n `${serviceName} ${signal} received, closing ${poolCount} pool(s) and ${clientCount} client(s)...`,\n );\n try {\n await closeAllClients();\n await closeAllPools();\n console.log(`${serviceName} All connections closed`);\n } catch (err) {\n logError('Unexpected error during shutdown', err);\n }\n}\n\nexport async function closeAllPools(): Promise<void> {\n const pools = [...poolRegistry];\n poolRegistry.clear();\n const results = await Promise.allSettled(pools.map((pool) => pool.end()));\n results.forEach((result, i) => {\n if (result.status === 'rejected') {\n logError(`Pool[${i}] failed to close`, result.reason);\n }\n });\n}\n\nexport async function closeAllClients(): Promise<void> {\n const clients = [...clientRegistry];\n clientRegistry.clear();\n const results = await Promise.allSettled(\n clients.map((client) => client.end()),\n );\n results.forEach((result, i) => {\n if (result.status === 'rejected') {\n logError(`Client[${i}] failed to close`, result.reason);\n }\n });\n}\n\nexport function registerPool(pool: Pool): void {\n if (!pool) return;\n try {\n poolRegistry.add(pool);\n } catch (err) {\n logError('Failed to register pool, closing pool', err);\n void pool\n .end()\n .catch((e) => logError('pool.end failed during rollback', e));\n throw err;\n }\n}\n\nexport function registerClient(client: Client): void {\n if (!client) return;\n try {\n clientRegistry.add(client);\n } catch (err) {\n logError('Failed to register client, closing client', err);\n void client\n .end()\n .catch((e) => logError('client.end failed during rollback', e));\n throw err;\n }\n}\n\nexport function unregisterClient(client: Client): void {\n try {\n clientRegistry.delete(client);\n } catch (err) {\n logError('Failed to unregister client', err);\n }\n}\n","import { Client } from 'pg';\nimport { logError } from '../../../helpers/errorHelper';\nimport { getConnectionAlias } from '../../../utils/constants';\nimport { registerClient, unregisterClient } from '../../connectionRegistry';\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 application_name: getConnectionAlias(),\n });\n await client.connect();\n registerClient(client);\n return client;\n }\n\n releaseClient(client: Client): void {\n try {\n unregisterClient(client);\n } catch (err) {\n logError('Error unregistering client', err);\n }\n void client\n .end()\n .catch((e) => logError('client.end failed during release', e));\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 const serviceName = process.env.SERVICE_NAME ? `[${process.env.SERVICE_NAME}/data-persistence]` : '[data-persistence]';\n console.info(`${serviceName} Query as Text:`, queryText);\n }\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 { Pool, PoolConfig } from 'pg';\nimport { getConnectionAlias, isMultiPlatformMode } from '../utils/constants';\nimport { registerPool } from './connectionRegistry';\n\nexport const DEFAULT_DB_POOL_CONFIG: PoolConfig = {\n max: 20,\n connectionTimeoutMillis: 10 * 1000,\n idleTimeoutMillis: 30 * 1000 /** DB cluster's idle timeout is 60 s */,\n keepAlive: true,\n keepAliveInitialDelayMillis: 10 * 1000,\n allowExitOnIdle: !!process.env.MULTIPLATFORM_PG_ALLOW_EXIT_ON_IDLE || false,\n};\n\nexport function getDbPool(poolConfig?: PoolConfig) {\n if (!isMultiPlatformMode()) return undefined;\n\n const pool = new Pool({\n ...DEFAULT_DB_POOL_CONFIG,\n connectionString: process.env.MULTIPLATFORM_PG_CONNECTION_STRING,\n application_name: getConnectionAlias(),\n ...poolConfig /** Custom implementer config */,\n });\n\n registerPool(pool);\n\n pool.on('error', (error: Error) => {\n /** Prevent idle-client connection drops from becoming uncaught exceptions. */\n const serviceName = process.env.SERVICE_NAME ? `[${process.env.SERVICE_NAME}/data-persistence]` : '[data-persistence]';\n console.error(\n `${serviceName} Unexpected PG pool error on idle client`,\n error,\n );\n });\n\n return pool;\n}\n"]}
|