component-dbs-core
Version:
DTO objects shared among device backend
108 lines • 4.82 kB
JavaScript
;
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