@qrvey/data-persistence 0.1.5 → 0.1.7

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/cruds/dynamodb/dynamoDbClient.service.ts","../../src/services/cruds/dynamodb/queryBuilderCondition.service.ts","../../src/services/cruds/dynamodb/queryBuilder.service.ts","../../src/services/cruds/dynamodb/dynamoDbCrud.service.ts"],"names":["_a","_b"],"mappings":"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","sourcesContent":["/* 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","/* 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","/* 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} 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 { replace = false },\n ): Promise<any> {\n const savedRecord = await this.findItem({\n filters: filters as IFilter[],\n });\n\n if (replace) {\n //delete all attributes of savedRecord except those that as marked as primary columns in the schema\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"]}
@@ -0,0 +1,168 @@
1
+ import * as pg from 'pg';
2
+ import { PoolClient } from 'pg';
3
+
4
+ interface IFilter {
5
+ attribute: string;
6
+ operator?: string;
7
+ value: unknown;
8
+ }
9
+
10
+ interface ICompositeFilter {
11
+ AND?: (IFilter | ICompositeFilter)[];
12
+ OR?: (IFilter | ICompositeFilter)[];
13
+ }
14
+
15
+ interface ICreateMultipleResponse {
16
+ unprocessedItems: Record<string, any>;
17
+ }
18
+
19
+ type FilterInput = string | IFilter[] | ICompositeFilter[] | ICompositeFilter;
20
+
21
+ declare enum SORT_DIRECTIONS {
22
+ ASC = "ASC",
23
+ DESC = "DESC"
24
+ }
25
+ declare enum AGGREGATE_FUNCTIONS {
26
+ COUNT = "COUNT"
27
+ }
28
+
29
+ type SortDirection = keyof typeof SORT_DIRECTIONS;
30
+
31
+ type AggregateFunction = keyof typeof AGGREGATE_FUNCTIONS;
32
+
33
+ interface IFindIndex {
34
+ indexName: string;
35
+ columns: string[];
36
+ }
37
+
38
+ interface IFindPagination {
39
+ limit?: number;
40
+ from?: any;
41
+ }
42
+
43
+ interface ISorting {
44
+ column: string;
45
+ direction?: SortDirection;
46
+ }
47
+
48
+ interface IFindOptions {
49
+ fields?: string[];
50
+ filters?: IFilter[] | ICompositeFilter;
51
+ aggregateFunction?: AggregateFunction;
52
+ sorting?: ISorting[];
53
+ pagination?: IFindPagination;
54
+ throwErrorIfNull?: boolean;
55
+ consistentRead?: boolean;
56
+ useScan?: boolean;
57
+ index?: IFindIndex;
58
+ }
59
+
60
+ interface IFindResult<T> {
61
+ items: T[];
62
+ pagination?: IFindPagination | null;
63
+ count: number;
64
+ }
65
+
66
+ interface IRemoveOptions {
67
+ filterGroups?: boolean;
68
+ }
69
+
70
+ interface IUpdateOptions {
71
+ replace?: boolean;
72
+ }
73
+
74
+ interface IGenericUpdateAction {
75
+ value: unknown;
76
+ path: string;
77
+ }
78
+ interface IRemoveUpdateAction {
79
+ path: string;
80
+ }
81
+ interface IUpdateExpressions {
82
+ SET?: IGenericUpdateAction[];
83
+ REMOVE?: IRemoveUpdateAction[];
84
+ ADD?: IGenericUpdateAction[];
85
+ DELETE?: IRemoveUpdateAction[];
86
+ }
87
+ interface IUpdateExpressionsOptions {
88
+ returnValues?: string;
89
+ conditionExpression?: string;
90
+ expressionAttributeNames?: any;
91
+ expressionAttributeValues?: any;
92
+ }
93
+
94
+ interface ICrudService<T> {
95
+ create(data: T | T[]): Promise<T | ICreateMultipleResponse>;
96
+ findItem(options?: IFindOptions): Promise<T | null>;
97
+ find(options?: IFindOptions): Promise<IFindResult<T>>;
98
+ findAll(options?: IFindOptions): Promise<IFindResult<T>>;
99
+ findCount(options?: IFindOptions): Promise<number>;
100
+ update(filters: IFilter[] | ICompositeFilter, data: Partial<T>, options?: IUpdateOptions): Promise<any | null>;
101
+ remove(filters: IFilter[] | ICompositeFilter | IFilter[][], options: IRemoveOptions): Promise<void>;
102
+ runQuery(queryCommand: any): Promise<any>;
103
+ updateExpressions(filters: IFilter[] | ICompositeFilter, actions: IUpdateExpressions, options?: IUpdateExpressionsOptions): Promise<any | null>;
104
+ }
105
+
106
+ interface ITableName {
107
+ name: string;
108
+ alias?: string;
109
+ }
110
+
111
+ interface ITableColumns {
112
+ [key: string]: {
113
+ type: string;
114
+ primary?: boolean;
115
+ columnId?: boolean;
116
+ default?: any;
117
+ };
118
+ }
119
+
120
+ declare class CrudSchema {
121
+ static table: string | ITableName;
122
+ static columns: ITableColumns;
123
+ static usePool?: boolean;
124
+ static schema: string | null;
125
+ static poolClient?: PoolClient;
126
+ }
127
+
128
+ declare class CrudService<T> {
129
+ private poolClient?;
130
+ private crudSchema;
131
+ constructor(crudSchema: typeof CrudSchema, poolClient?: PoolClient | undefined);
132
+ private getCrudServiceInstance;
133
+ private getDefaultValue;
134
+ private setDefaultValues;
135
+ create(data: T | T[]): Promise<unknown | ICreateMultipleResponse>;
136
+ find(options: IFindOptions): Promise<IFindResult<unknown>>;
137
+ findItem(options: IFindOptions): Promise<unknown>;
138
+ update(filters: IFilter[] | ICompositeFilter, data: Partial<T>): Promise<T | null>;
139
+ remove(filters: IFilter[] | ICompositeFilter | IFilter[][], options?: IRemoveOptions): Promise<void>;
140
+ findAll(options: IFindOptions): Promise<IFindResult<unknown>>;
141
+ findCount(findCountOptions: IFindOptions): Promise<number>;
142
+ buildFilter(attribute: string, value: any, operator?: string): {
143
+ attribute: string;
144
+ operator: string;
145
+ value: any;
146
+ };
147
+ buildQueryIndex(indexName: string, columns: string[]): {
148
+ indexName: string;
149
+ columns: string[];
150
+ };
151
+ buildSort(column: string, direction: string): ISorting;
152
+ updateExpression(filters: IFilter[] | ICompositeFilter, actions: IUpdateExpressions, options?: IUpdateExpressionsOptions): Promise<T | null>;
153
+ }
154
+
155
+ declare function buildFilter(attribute: string, value: any, operator?: string): {
156
+ attribute: string;
157
+ operator: string;
158
+ value: any;
159
+ };
160
+ declare function buildQueryIndex(indexName: string, columns: string[]): {
161
+ indexName: string;
162
+ columns: string[];
163
+ };
164
+ declare function buildSort(column: string, direction?: string): ISorting;
165
+
166
+ declare function getDbPool(): Promise<pg.PoolClient | undefined>;
167
+
168
+ export { AggregateFunction, CrudSchema, CrudService, FilterInput, ICrudService, IFilter, IFindOptions, IFindPagination, ISorting, SortDirection, buildFilter, buildQueryIndex, buildSort, getDbPool };
@@ -1,29 +1,150 @@
1
- import { default as default2 } from "./services/crud.service";
2
- import { CrudSchema } from "./schemas/crudSchema";
3
- import {
4
- IFindOptions,
5
- ISorting,
6
- ICrudService,
7
- IFilter,
8
- IFindPagination
9
- } from "./interfaces";
10
- import { SortDirection, AggregateFunction, FilterInput } from "./types";
11
- import { buildFilter, buildQueryIndex, buildSort } from "./helpers/crudHelpers";
12
- import { getDbPool } from "./services/dbPool.service";
13
- export {
14
- AggregateFunction,
15
- CrudSchema,
16
- default2 as CrudService,
17
- FilterInput,
18
- ICrudService,
19
- IFilter,
20
- IFindOptions,
21
- IFindPagination,
22
- ISorting,
23
- SortDirection,
24
- buildFilter,
25
- buildQueryIndex,
26
- buildSort,
27
- getDbPool
1
+ import { FILTER_LOGIC_OPERATORS, CONNECTION_CLOSING_MODES, isMultiPlatformMode, __spreadValues, __objRest } from './chunk-6MOAJFFY.mjs';
2
+ import { Pool } from 'pg';
3
+
4
+ // src/helpers/crudHelpers.ts
5
+ function buildFilter(attribute, value, operator = "EQUAL") {
6
+ return {
7
+ attribute,
8
+ operator,
9
+ value
10
+ };
11
+ }
12
+ function buildQueryIndex(indexName, columns) {
13
+ return {
14
+ indexName,
15
+ columns
16
+ };
17
+ }
18
+ function buildSort(column, direction = "ASC" /* ASC */) {
19
+ return {
20
+ column,
21
+ direction
22
+ };
23
+ }
24
+
25
+ // src/services/crudFactory.service.ts
26
+ var CrudFactory = class {
27
+ static async databaseClientService(crudSchema, poolClient) {
28
+ var _a;
29
+ const isMultiPlatformMode2 = ((_a = process.env.PLATFORM_TYPE) == null ? void 0 : _a.toLowerCase()) === "container";
30
+ let DatabaseCrudService;
31
+ if (isMultiPlatformMode2) {
32
+ const module = await import('./postgreSqlCrud.service-3ILHEXDN.mjs');
33
+ DatabaseCrudService = module.PostgreSqlCrudService;
34
+ } else {
35
+ const module = await import('./dynamoDbCrud.service-CS264IQJ.mjs');
36
+ DatabaseCrudService = module.DynamoDbCrudService;
37
+ }
38
+ return new DatabaseCrudService(crudSchema, poolClient);
39
+ }
28
40
  };
41
+
42
+ // src/services/crud.service.ts
43
+ var CrudService = class {
44
+ constructor(crudSchema, poolClient) {
45
+ this.poolClient = poolClient;
46
+ this.crudSchema = crudSchema;
47
+ }
48
+ async getCrudServiceInstance() {
49
+ const crudService = await CrudFactory.databaseClientService(
50
+ this.crudSchema,
51
+ this.poolClient
52
+ );
53
+ return crudService;
54
+ }
55
+ getDefaultValue(columnName) {
56
+ const column = this.crudSchema.columns[columnName];
57
+ return column ? column.default : void 0;
58
+ }
59
+ setDefaultValues(data) {
60
+ const defaultValues = {};
61
+ const columns = this.crudSchema.columns;
62
+ for (const columnName in columns) {
63
+ const missingColumnValue = !(columnName in data);
64
+ const columnDefaultValue = this.getDefaultValue(columnName);
65
+ if (missingColumnValue && columnDefaultValue) {
66
+ defaultValues[columnName] = columnDefaultValue;
67
+ }
68
+ }
69
+ return __spreadValues(__spreadValues({}, defaultValues), data);
70
+ }
71
+ create(data) {
72
+ const processedData = Array.isArray(data) ? data.map(this.setDefaultValues.bind(this)) : this.setDefaultValues(data);
73
+ return this.getCrudServiceInstance().then(
74
+ (crudService) => crudService.create(processedData)
75
+ );
76
+ }
77
+ find(options) {
78
+ return this.getCrudServiceInstance().then(
79
+ (crudService) => crudService.find(options)
80
+ );
81
+ }
82
+ findItem(options) {
83
+ return this.getCrudServiceInstance().then(
84
+ (crudService) => crudService.findItem(options)
85
+ );
86
+ }
87
+ update(filters, data) {
88
+ return this.getCrudServiceInstance().then(
89
+ (crudService) => crudService.update(filters, data, {})
90
+ );
91
+ }
92
+ remove(filters, options = {}) {
93
+ return this.getCrudServiceInstance().then(
94
+ (crudService) => crudService.remove(filters, options)
95
+ );
96
+ }
97
+ findAll(options) {
98
+ const _a = options, findAllOptions = __objRest(_a, ["pagination"]);
99
+ return this.getCrudServiceInstance().then(
100
+ (crudService) => crudService.findAll(findAllOptions)
101
+ );
102
+ }
103
+ findCount(findCountOptions) {
104
+ return this.getCrudServiceInstance().then(
105
+ (crudService) => crudService.findCount(findCountOptions)
106
+ );
107
+ }
108
+ buildFilter(attribute, value, operator = "EQUAL") {
109
+ return buildFilter(attribute, value, operator);
110
+ }
111
+ buildQueryIndex(indexName, columns) {
112
+ return buildQueryIndex(indexName, columns);
113
+ }
114
+ buildSort(column, direction) {
115
+ return buildSort(column, direction);
116
+ }
117
+ updateExpression(filters, actions, options) {
118
+ return this.getCrudServiceInstance().then(
119
+ (crudService) => crudService.updateExpressions(filters, actions, options)
120
+ );
121
+ }
122
+ };
123
+ var crud_service_default = CrudService;
124
+
125
+ // src/schemas/crudSchema.ts
126
+ var CrudSchema = class {
127
+ };
128
+ CrudSchema.usePool = false;
129
+ CrudSchema.schema = null;
130
+
131
+ // src/types/filterLogicOperator.type.ts
132
+ Object.values(
133
+ FILTER_LOGIC_OPERATORS
134
+ );
135
+
136
+ // src/types/connectionClosingMode.type.ts
137
+ Object.values(CONNECTION_CLOSING_MODES);
138
+ async function getDbPool() {
139
+ if (!isMultiPlatformMode())
140
+ return void 0;
141
+ const pool = new Pool({
142
+ connectionString: process.env.MULTIPLATFORM_PG_CONNECTION_STRING
143
+ });
144
+ const poolClient = await pool.connect();
145
+ return poolClient;
146
+ }
147
+
148
+ export { CrudSchema, crud_service_default as CrudService, buildFilter, buildQueryIndex, buildSort, getDbPool };
149
+ //# sourceMappingURL=out.js.map
29
150
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export { default as CrudService } from './services/crud.service';\nexport { CrudSchema } from './schemas/crudSchema';\nexport {\n IFindOptions,\n ISorting,\n ICrudService,\n IFilter,\n IFindPagination,\n} from './interfaces';\n\nexport { SortDirection, AggregateFunction, FilterInput } from './types';\n\nexport { buildFilter, buildQueryIndex, buildSort } from './helpers/crudHelpers';\n\nexport { getDbPool } from './services/dbPool.service';\n"],"mappings":"AAAA,SAAoB,WAAXA,gBAA8B;AACvC,SAAS,kBAAkB;AAC3B;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAEP,SAAS,eAAe,mBAAmB,mBAAmB;AAE9D,SAAS,aAAa,iBAAiB,iBAAiB;AAExD,SAAS,iBAAiB;","names":["default"]}
1
+ {"version":3,"sources":["../../src/helpers/crudHelpers.ts","../../src/services/crudFactory.service.ts","../../src/services/crud.service.ts","../../src/schemas/crudSchema.ts","../../src/types/filterLogicOperator.type.ts","../../src/types/connectionClosingMode.type.ts","../../src/services/dbPool.service.ts"],"names":["isMultiPlatformMode"],"mappings":"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","sourcesContent":["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(attribute: string, value: any, operator = 'EQUAL') {\n return {\n attribute,\n operator,\n value,\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","import { PoolClient } from 'pg';\nimport { ICrudService } from '../interfaces';\nimport { CrudSchema } from '../schemas';\nimport { DbPoolClient } from '../types';\nexport class CrudFactory {\n static async databaseClientService<T>(\n crudSchema: typeof CrudSchema,\n poolClient?: PoolClient,\n ): Promise<ICrudService<T>> {\n const isMultiPlatformMode =\n process.env.PLATFORM_TYPE?.toLowerCase() === 'container';\n\n let DatabaseCrudService: new <T>(\n schema: typeof CrudSchema,\n poolClient?: DbPoolClient,\n ) => ICrudService<T>;\n\n if (isMultiPlatformMode) {\n const module = await import(\n './cruds/postgresql/postgreSqlCrud.service'\n );\n DatabaseCrudService = module.PostgreSqlCrudService;\n } else {\n const module = await import(\n './cruds/dynamodb/dynamoDbCrud.service'\n );\n DatabaseCrudService = module.DynamoDbCrudService;\n }\n\n return new DatabaseCrudService(crudSchema, poolClient);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { PoolClient } 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} 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 poolClient?: PoolClient,\n ) {\n this.crudSchema = crudSchema;\n }\n\n private async getCrudServiceInstance() {\n const crudService = await CrudFactory.databaseClientService(\n this.crudSchema,\n this.poolClient,\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 ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.update(filters, 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(attribute: string, value: any, operator = 'EQUAL') {\n return buildFilter(attribute, value, operator);\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\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}\n","import { FILTER_LOGIC_OPERATORS } from '../utils/constants';\n\nconst VALID_FILTER_LOGIC_OPERATORS: FILTER_LOGIC_OPERATORS[] = Object.values(\n FILTER_LOGIC_OPERATORS,\n);\n\nexport type FilterLogicOperator = (typeof VALID_FILTER_LOGIC_OPERATORS)[number];\n","import { CONNECTION_CLOSING_MODES } from '../utils/constants';\n\nconst VALID_CONNECTION_CLOSING_MODES: CONNECTION_CLOSING_MODES[] =\n Object.values(CONNECTION_CLOSING_MODES);\n\nexport type ConnectionClosingMode =\n (typeof VALID_CONNECTION_CLOSING_MODES)[number];\n","import { Pool } from 'pg';\nimport { isMultiPlatformMode } from '../utils/constants';\n\nexport async function getDbPool() {\n if (!isMultiPlatformMode()) return undefined;\n\n const pool = new Pool({\n connectionString: process.env.MULTIPLATFORM_PG_CONNECTION_STRING,\n });\n const poolClient = await pool.connect();\n return poolClient;\n}\n"]}