@golemio/energetics
Version:
Golemio Energetics Module
91 lines • 4.93 kB
JavaScript
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 __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MeasurementRepository = void 0;
const _sch_1 = require("../../schema-definitions");
const output_gateway_1 = require("@golemio/core/dist/output-gateway");
const sequelize_1 = require("@golemio/core/dist/shared/sequelize");
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
const MeasurementsModel_1 = require("../../schema-definitions/models/MeasurementsModel");
const constants_1 = require("../../schema-definitions/constants");
let MeasurementRepository = exports.MeasurementRepository = class MeasurementRepository extends output_gateway_1.SequelizeModel {
constructor() {
super("MeasurementsRepository", MeasurementsModel_1.MeasurementModel.tableName, MeasurementsModel_1.MeasurementModel.attributeModel, {
schema: _sch_1.EnergeticsSchema.pgSchema,
});
this.getWhereAccessLimitation = (allowedOrganizations) => {
return {
[sequelize_1.Op.in]: (0, sequelize_1.literal)(`(select distinct d.addr from ${constants_1.PG_SCHEMA}.organizations_buildings b
inner join ${constants_1.PG_SCHEMA}.consumption_energy_devices d on b.building_id = d.building_id
where b.organization_id = any('{${allowedOrganizations.join(",")}}'::integer[]))`),
};
};
}
async getMeasurements(options, allowedOrganizations) {
try {
const where = {
[sequelize_1.Op.and]: [
...(options.variable ? [{ var: { [sequelize_1.Op.eq]: options.variable } }] : []),
...(options.type ? [{ type: { [sequelize_1.Op.eq]: options.type } }] : []),
...(options.addr1 && options.addr2 ? [{ addr: { [sequelize_1.Op.eq]: `/${options.addr1}/${options.addr2}` } }] : []),
...(options.dateFrom ? [{ timestamp: { [sequelize_1.Op.gte]: options.dateFrom } }] : []),
...(options.dateTo ? [{ timestamp: { [sequelize_1.Op.lte]: options.dateTo } }] : []),
allowedOrganizations === null
? {}
: {
addr: this.getWhereAccessLimitation(allowedOrganizations),
},
],
};
return await this.sequelizeModel.findAll({
attributes: [["timestamp", "time"], "value", "addr", "meter", "type", "var"],
where,
order: [["timestamp", "DESC"]],
limit: options.limit,
offset: options.offset,
});
}
catch (err) {
throw new golemio_errors_1.GeneralError("MeasurementsRepository error - getMeasurements", this.name, err, 500);
}
}
async getMonthlyReadings(options, allowedOrganizations) {
try {
const result = await this.sequelizeModel.sequelize.query(`SELECT * from ${constants_1.PG_SCHEMA}.monthly_report($address, $variable, $date_from, $date_to, $org_ids);`, {
bind: {
address: options.address,
variable: options.variable,
date_from: options.from,
date_to: options.to,
org_ids: allowedOrganizations ? allowedOrganizations.join(",") : null,
},
raw: true,
type: sequelize_1.QueryTypes.SELECT,
});
return result;
}
catch (err) {
throw new golemio_errors_1.GeneralError("MeasurementsRepository error - getMonthlyReadings", this.name, err, 500);
}
}
async GetAll() {
throw new Error("MeasurementsRepository - GetOne not implemented");
}
async GetOne() {
throw new Error("MeasurementsRepository - GetOne not implemented");
}
};
exports.MeasurementRepository = MeasurementRepository = __decorate([
(0, tsyringe_1.injectable)(),
__metadata("design:paramtypes", [])
], MeasurementRepository);
//# sourceMappingURL=MeasurementRepository.js.map
;