UNPKG

@golemio/energetics

Version:
91 lines 4.93 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 __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