@golemio/parkings
Version:
Golemio Parkings Module
84 lines • 3.67 kB
JavaScript
;
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