UNPKG

@golemio/energetics

Version:
117 lines 7.38 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); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EnapoPpasTask = void 0; const CommodityProviderEnum_1 = require("../../../commodity-providers/datasources/helpers/CommodityProviderEnum"); const AveDataTypeEnum_1 = require("../../../commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum"); const PpasAveApiHelper_1 = require("../../../commodity-providers/datasources/ppas-ave-api/helpers/PpasAveApiHelper"); const IntervalGenerator_1 = require("../../helpers/IntervalGenerator"); const EnapoWorkerContainerToken_1 = require("../../ioc/EnapoWorkerContainerToken"); const EnapoMeasurementsRepository_1 = require("../../repositories/EnapoMeasurementsRepository"); const PPasMeasurementTransformation_1 = require("../../transformations/PPasMeasurementTransformation"); const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken"); const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors"); const luxon_1 = require("@golemio/core/dist/shared/luxon"); const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe"); const EnapoPpasMeasurementsParamsValidationSchema_1 = require("../schema/EnapoPpasMeasurementsParamsValidationSchema"); const AbstractEnapoFetchMeasurementsTask_1 = require("./AbstractEnapoFetchMeasurementsTask"); let EnapoPpasTask = exports.EnapoPpasTask = class EnapoPpasTask extends AbstractEnapoFetchMeasurementsTask_1.AbstractEnapoFetchMeasurementsTask { constructor(config, measurementsRepository, transformation, logger, dataSourceFactory) { super(); this.config = config; this.measurementsRepository = measurementsRepository; this.transformation = transformation; this.logger = logger; this.dataSourceFactory = dataSourceFactory; this.queueName = "fetchPpasMeasurements"; this.queueTtl = 60 * 60 * 1000; this.schema = EnapoPpasMeasurementsParamsValidationSchema_1.EnapoPpasMeasurementsParamsValidationSchema; } async execute(params) { const { baseUrl, config } = this.getProviderConfig(params); const aveApiHelper = new PpasAveApiHelper_1.PpasAveApiHelper(baseUrl, config); const sessionId = await aveApiHelper.createSession(); try { const places = await this.getDataFromDataSource("Places", sessionId); for (const place of places) { if (config.excludelist && config.excludelist.includes(place.Eic)) { continue; } this.logger.info(`Fetching data for device ${place.DeviceSerialNumber}`); await this.fetchAndSave(place, sessionId, params); } } finally { await aveApiHelper.terminateSession(sessionId); } } async fetchAndSave(place, sessionId, params) { try { if (!params?.targetDays && (!params?.dateFrom || !params?.dateTo)) { throw new golemio_errors_1.GeneralError("Both dateFrom and dateTo must be provided when targetDays is not specified", this.constructor.name); } const intervals = params.targetDays ? IntervalGenerator_1.IntervalGenerator.generateIntervalsFromTargetDays({ targetDays: params.targetDays }, 5) : IntervalGenerator_1.IntervalGenerator.getIntervals(luxon_1.DateTime.fromISO(params.dateFrom), luxon_1.DateTime.fromISO(params.dateTo), 5); for (const interval of intervals) { const start = interval.start.startOf("day"); const end = interval.end.startOf("day"); const measurementRawData = await this.getDataFromDataSource("DeviceData", sessionId, { placeId: place.Id, dateFrom: start.toISODate(), dateTo: end.toISODate(), isoDate: "1", // fill all measurement values (we need the OperatingAmount and ConvertDifference values) truncateData: "0", dataType: AveDataTypeEnum_1.AveDataType.RawData.toString(), }); const measurementRawDataWithPlace = measurementRawData.map((item) => ({ ...place, ...item, })); const transFormedData = this.transformation.transformArray(measurementRawDataWithPlace); await this.saveConsumptionData(transFormedData.flatMap((item) => Object.values(item))); } } catch (err) { if (err instanceof golemio_errors_1.AbstractGolemioError) { throw err; } throw new golemio_errors_1.GeneralError(`Unable to download data for place id: ${place.Id} eic: ${place.Eic}`, this.constructor.name, err); } } getProviderConfig(data) { const rawConfig = this.config.getValue(`module.energetics.commodityProviders.${data.providerType}`); rawConfig.excludelist = rawConfig.excludelist ? Object.values(rawConfig.excludelist) : null; return { baseUrl: this.config.getValue("module.energetics.commodityProviders.ppas_ave_api.baseUrl"), config: this.config.getValue(`module.energetics.commodityProviders.${data.providerType}`), }; } getDataFromDataSource(resourceTypeKey, sessionId, params) { const dataSource = this.dataSourceFactory.getDataSource(CommodityProviderEnum_1.CommodityProvider.PpasInternetAveApi, PpasAveApiHelper_1.PpasAveApiHelper.resourceType[resourceTypeKey], sessionId, params); return dataSource.getAll(); } }; exports.EnapoPpasTask = EnapoPpasTask = __decorate([ (0, tsyringe_1.injectable)(), __param(0, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.SimpleConfig)), __param(1, (0, tsyringe_1.inject)(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.EnapoMeasurementsRepository)), __param(2, (0, tsyringe_1.inject)(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.PPasMeasurementTransformation)), __param(3, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.Logger)), __param(4, (0, tsyringe_1.inject)(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.CommodityProviderDataSourceFactory)), __metadata("design:paramtypes", [Object, EnapoMeasurementsRepository_1.EnapoMeasurementsRepository, PPasMeasurementTransformation_1.PPasMeasurementTransformation, Object, Object]) ], EnapoPpasTask); //# sourceMappingURL=EnapoPpasTask.js.map