UNPKG

component-dbs-core

Version:

DTO objects shared among device backend

108 lines 4.82 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SiteDb = void 0; const uuid_1 = require("uuid"); class SiteDb { constructor(tableName, documentClient, deviceTableName, siteUuidGsi) { this.tableName = tableName; this.documentClient = documentClient; this.deviceTableName = deviceTableName; this.siteUuidGsi = siteUuidGsi; this.getSites = (entityUuid, limit, nextToken) => __awaiter(this, void 0, void 0, function* () { const params = { TableName: this.tableName, KeyConditionExpression: 'entityUuid = :entityUuid', ExpressionAttributeValues: { ':entityUuid': entityUuid }, Limit: limit, }; if (nextToken) { params.ExclusiveStartKey = nextToken; } const outputItems = yield this.documentClient.query(params).promise(); if (outputItems.Items && outputItems.Items.length > 0) { const proms = outputItems.Items.map((item) => this.getSiteWithDevices(item)); const sites = yield Promise.all(proms); return { sites, nextToken: outputItems.LastEvaluatedKey, }; } return { sites: [] }; }); this.createSite = (entityUuid, siteInput) => __awaiter(this, void 0, void 0, function* () { const site = { entityUuid, siteUuid: uuid_1.v4(), name: siteInput.name, address: siteInput.address, state: siteInput.state, }; const params = { TableName: this.tableName, Item: site, }; yield this.documentClient.put(params).promise(); return site.siteUuid; }); this.getSite = (entityUuid, siteUuid) => __awaiter(this, void 0, void 0, function* () { const params = { TableName: this.tableName, KeyConditionExpression: 'entityUuid = :entityUuid AND siteUuid = :siteUuid', ExpressionAttributeValues: { ':entityUuid': entityUuid, ':siteUuid': siteUuid, }, }; console.log('query params:', params); const siteItem = yield this.documentClient.query(params).promise(); if (siteItem.Items && siteItem.Items.length > 0) { return this.getSiteWithDevices(siteItem.Items[0]); } console.log(`Cant find site (${siteUuid}) in entity (${entityUuid})`); throw new Error(`Cant find site (${siteUuid}).`); }); this.getSiteWithDevices = (siteItem) => __awaiter(this, void 0, void 0, function* () { const site = { id: siteItem.siteUuid, name: siteItem.name, address: siteItem.address, state: siteItem.state, devices: [], }; const deviceItems = yield this.getSiteDevices(site.id); if (deviceItems.Items && deviceItems.Items.length > 0) { site.devices = deviceItems.Items.map((item) => ({ id: item.id, model: item.model, serial: item.serial, name: item.name, })); } return site; }); this.getSiteDevices = (siteUuid) => { const params = { TableName: this.deviceTableName, IndexName: this.siteUuidGsi, KeyConditionExpression: 'siteUuid = :siteUuid AND #type = :type', ExpressionAttributeValues: { ':siteUuid': siteUuid, ':type': "core" /* core */, }, ExpressionAttributeNames: { '#type': 'type' }, }; return this.documentClient.query(params).promise(); }; } } exports.SiteDb = SiteDb; //# sourceMappingURL=siteDb.js.map