UNPKG

@golemio/parkings

Version:
84 lines 3.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ParkingTariffDtoTransformation = void 0; const AbstractTransformation_1 = require("@golemio/core/dist/helpers/transformation/AbstractTransformation"); const luxon_1 = require("@golemio/core/dist/shared/luxon"); class ParkingTariffDtoTransformation extends AbstractTransformation_1.AbstractTransformation { constructor() { super(...arguments); this.name = "ParkingTariffDtoTransformation"; this.transformInternal = (elements) => { return elements.map((el) => { const result = { id: el.tariff_id, charge_bands: this.transformToChargeBands(el.parking_tariffs), }; return result; }); }; } transformToChargeBands(sameTariff) { const groupedChargeBands = sameTariff.reduce((acc, curr) => { if (!acc[curr.charge_band_name]) { acc[curr.charge_band_name] = []; } acc[curr.charge_band_name].push(curr); return acc; }, {}); return Object.keys(groupedChargeBands).map((key) => { const element = groupedChargeBands[key][0]; const charbandValidFrom = this.minDate(groupedChargeBands[key].map((element) => element.valid_from)); const charbandValidTo = this.maxDate(groupedChargeBands[key].map((element) => element.valid_to)); return { primary_source: element.source, primary_source_id: element.tariff_id, maximum_duration: element.maximum_duration_seconds, valid_from: charbandValidFrom, valid_to: charbandValidTo, last_updated: element.updated_at, last_modified_at_source: element.last_updated, payment_mode: element.payment_mode, url: element.url_link_address, free_of_charge: element.free_of_charge, payment_methods: element.payment_methods ?? [], charges: this.transformToCharges(groupedChargeBands[key]), }; }); } transformToCharges(elements) { return elements.map((element) => { return { id: element.tariff_id, charge: element.charge, charge_type: element.charge_type, charge_order_index: element.charge_order_index, charge_interval: element.charge_interval, max_iterations_of_charge: element.max_iterations_of_charge, min_iterations_of_charge: element.min_iterations_of_charge, valid_from: element.valid_from?.toISOString(), valid_to: element.valid_to?.toISOString(), periods_of_time: element.periods_of_time, }; }); } minDate(isoStrings) { isoStrings = isoStrings.filter((el) => el !== null); if (isoStrings.length === 0) { return null; } return luxon_1.DateTime.min(...isoStrings.map((el) => luxon_1.DateTime.fromJSDate(el))) .toJSDate() .toISOString(); } maxDate(isoStrings) { isoStrings = isoStrings.filter((el) => el !== null); if (isoStrings.length === 0) { return null; } return luxon_1.DateTime.max(...isoStrings.map((el) => luxon_1.DateTime.fromJSDate(el))) .toJSDate() .toISOString(); } } exports.ParkingTariffDtoTransformation = ParkingTariffDtoTransformation; //# sourceMappingURL=ParkingTariffDtoTransformation.js.map