UNPKG

component-dbs-core

Version:

DTO objects shared among device backend

119 lines 5.77 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DynamodbUtils = void 0; const common_1 = require("@nestjs/common"); const aws_sdk_1 = __importDefault(require("aws-sdk")); let DynamodbUtils = class DynamodbUtils { constructor() { this.convertTimestampFilter = (filter, type) => { const jFilter = JSON.parse(filter); const input = { TableName: '', ExpressionAttributeValues: {}, }; const values = aws_sdk_1.default.DynamoDB.Converter.unmarshall(jFilter.expressionValues); if (':timestampFilter_gt' in jFilter.expressionValues && ':timestampFilter_lt' in jFilter.expressionValues) { input.KeyConditionExpression = '#type BETWEEN :timestampFilter_gt AND :timestampFilter_lt'; } else if (':timestampFilter_gt' in jFilter.expressionValues) { input.KeyConditionExpression = '#type > :timestampFilter_gt'; } else if (':timestampFilter_lt' in jFilter.expressionValues) { input.KeyConditionExpression = '#type < :timestampFilter_lt'; } else if (':timestampFilter_between_start' in jFilter.expressionValues && ':timestampFilter_between_end' in jFilter.expressionValues) { input.KeyConditionExpression = '(#type BETWEEN :timestampFilter_between_start AND :timestampFilter_between_end)'; } const valueEntries = Object.entries(values); valueEntries.forEach(([key, value]) => { const time = new Date(value).getTime(); if (typeof input.ExpressionAttributeValues !== 'undefined') { input.ExpressionAttributeValues[key] = `${type}.${time}`; } }); return input; }; /** * create a last year time window if the request doesn't have timestamp in the filter */ this.createLastYearQuery = () => { const now = new Date(); const lastYear = new Date(); lastYear.setFullYear(lastYear.getFullYear() - 1); const tFilter = { expression: '#timestampFilter < :timestampFilter_lt AND #timestampFilter > :timestampFilter_gt', expressionNames: { '#timestampFilter': 'timestamp' }, expressionValues: { ':timestampFilter_gt': { S: lastYear.toISOString() }, ':timestampFilter_lt': { S: now.toISOString() }, }, }; return JSON.stringify(tFilter); }; } convertDbItemToDto(item, dbToDtoNameMapping, attributesToDelete) { let dto = {}; const mapValue = {}; Object.keys(item) .filter((key) => !key.startsWith('aws:rep')) .forEach((key) => { dto[key] = item[key]; if (key in dbToDtoNameMapping) { mapValue[dbToDtoNameMapping[key]] = item[key]; } }); if (typeof attributesToDelete !== 'undefined' && attributesToDelete.length > 0) { attributesToDelete.forEach((key) => { if (key in dto) { delete dto[key]; } }); } dto = Object.assign(Object.assign({}, dto), mapValue); return dto; } /** * * @param params This is the QueryInput parameter that will be populated with the provided arguments * @param timestampFilter * @param filter * @param nextToken */ prepareMultiQueryParams(queryInput, type, timestampFilter, nextToken, filter) { const params = queryInput; if (nextToken) { params.ExclusiveStartKey = nextToken; } // add timestamp const timestampExpression = this.convertTimestampFilter(timestampFilter, type); params.KeyConditionExpression += ` AND ${timestampExpression.KeyConditionExpression}`; params.ExpressionAttributeValues = Object.assign(Object.assign({}, params.ExpressionAttributeValues), timestampExpression.ExpressionAttributeValues); params.ExpressionAttributeNames = Object.assign(Object.assign({}, params.ExpressionAttributeNames), timestampExpression.ExpressionAttributeNames); if (filter) { const jfilter = JSON.parse(filter); params.FilterExpression = jfilter.expression; params.ExpressionAttributeValues = Object.assign(Object.assign({}, params.ExpressionAttributeValues), aws_sdk_1.default.DynamoDB.Converter.unmarshall(jfilter.expressionValues)); params.ExpressionAttributeNames = Object.assign(Object.assign({}, params.ExpressionAttributeNames), jfilter.expressionNames); } return params; } }; DynamodbUtils = __decorate([ common_1.Injectable() ], DynamodbUtils); exports.DynamodbUtils = DynamodbUtils; //# sourceMappingURL=dynamodbUtils.js.map