@golemio/parkings
Version:
Golemio Parkings Module
198 lines • 8.09 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MrParkitGarageTransformation = void 0;
const SourceEnum_1 = require("../../helpers/constants/SourceEnum");
const AbstractTransformation_1 = require("@golemio/core/dist/helpers/transformation/AbstractTransformation");
const output_gateway_1 = require("@golemio/core/dist/output-gateway");
var DaysInWeekEnum;
(function (DaysInWeekEnum) {
DaysInWeekEnum["monday"] = "Mo";
DaysInWeekEnum["tuesday"] = "Tu";
DaysInWeekEnum["wednesday"] = "We";
DaysInWeekEnum["thursday"] = "Th";
DaysInWeekEnum["friday"] = "Fr";
DaysInWeekEnum["saturday"] = "Sa";
DaysInWeekEnum["sunday"] = "Su";
})(DaysInWeekEnum || (DaysInWeekEnum = {}));
var OffWeekDays;
(function (OffWeekDays) {
OffWeekDays["saturday"] = "Sa";
OffWeekDays["sunday"] = "Su";
})(OffWeekDays || (OffWeekDays = {}));
var PhTypes;
(function (PhTypes) {
PhTypes["off"] = "ph_off";
PhTypes["only"] = "ph_only";
})(PhTypes || (PhTypes = {}));
class MrParkitGarageTransformation extends AbstractTransformation_1.AbstractTransformation {
constructor(transformationDate) {
super();
this.transformationDate = transformationDate;
this.name = "MrParkitGarageTransformation";
this.transformInternal = (data) => {
const location = {
type: output_gateway_1.GeoCoordinatesType.Point,
coordinates: [data.longitude, data.latitude],
};
const parking = {
id: `${SourceEnum_1.SourceEnum.Mr_Parkit}-${data.id}`,
source: SourceEnum_1.SourceEnum.Mr_Parkit,
source_id: data.id,
data_provider: "www.mrparkit.com",
name: data.name,
location,
centroid: location,
total_spot_number: null,
date_modified: this.transformationDate.toISOString(),
valid_from: undefined,
parking_type: "underground",
address: {
address_country: "Česko",
address_formatted: data.address,
},
security: data.benefits?.includes("security_system") || data.benefits?.includes("cctv"),
max_vehicle_dimensions: data.length && data.width && data.height ? [data.length / 100, data.width / 100, data.height / 100, 0] : null,
active: true,
};
return {
...parking,
parkingLocation: this.transformLocation(parking),
parkingMeasurement: this.transformMeasurement(parking, data),
tariffs: this.transformTariffElement(data),
parkingTariffsRelations: this.transformParkingTariffsRelation(data),
parkingProhibitions: this.transformParkingProhibitions(data),
};
};
this.transformLocation = (parking) => {
return {
id: parking.id,
source: parking.source,
source_id: parking.source_id,
data_provider: parking.data_provider,
location: parking.location,
centroid: parking.centroid,
total_spot_number: parking.total_spot_number,
address: parking.address,
special_access: null,
};
};
this.transformMeasurement = (parking, data) => {
return {
parking_id: parking.id,
source: parking.source,
source_id: parking.source_id,
available_spot_number: data.free ? 1 : 0,
date_modified: this.transformationDate.toISOString(),
occupied_spot_number: null,
total_spot_number: null,
};
};
this.transformParkingTariffsRelation = (data) => {
return {
parking_id: `${SourceEnum_1.SourceEnum.Mr_Parkit}-${data.id}`,
tariff_id: data.id,
source: SourceEnum_1.SourceEnum.Mr_Parkit,
};
};
this.transformTariffElement = (element) => {
const tariffCommonInfo = {
source: SourceEnum_1.SourceEnum.Mr_Parkit,
tariff_id: element.id,
last_updated: this.transformationDate.toISOString(),
free_of_charge: false,
payment_mode: "pre_paid",
charge_currency: "czk",
valid_from: this.transformationDate.toISOString(),
};
const result = [
{
charge_band_name: `${element.name}_hourly_tariffs`,
...tariffCommonInfo,
...this.getHourlyTariffs(element),
},
{
charge_band_name: `${element.name}_workday_tariffs`,
...tariffCommonInfo,
...this.getWorkDayTariffs(element),
},
{
charge_band_name: `${element.name}_weekend_tariffs`,
...tariffCommonInfo,
...this.getWeekendTariffs(element),
},
];
return result;
};
this.getHourlyTariffs = (element) => {
return {
charge: element.pricePerHour / 100,
charge_type: "other",
charge_order_index: 0,
charge_interval: 3600,
max_iterations_of_charge: 24,
min_iterations_of_charge: element.minReservationDuration,
periods_of_time: this.getWorkDayPeriodsOfTime(),
};
};
this.getWorkDayTariffs = (element) => {
return {
charge: element.pricePerDay / 100,
charge_type: "other",
charge_order_index: 1,
charge_interval: 86400,
max_iterations_of_charge: element.maxReservationDuration / 24,
min_iterations_of_charge: 0,
periods_of_time: this.getWorkDayPeriodsOfTime(),
};
};
this.getWeekendTariffs = (element) => {
return {
charge: element.pricePerWeekend / 100,
charge_type: "other",
charge_order_index: 2,
charge_interval: 172800,
max_iterations_of_charge: 1,
min_iterations_of_charge: 0,
periods_of_time: this.getWeekendPeriodsOfTime(),
};
};
this.transformParkingProhibitions = (element) => {
return {
parking_id: `${SourceEnum_1.SourceEnum.Mr_Parkit}-${element.id}`,
source: SourceEnum_1.SourceEnum.Mr_Parkit,
lpg: element.lpgCngAllowed,
motorcycle: element.motorbikesAllowed,
};
};
this.getWorkDayPeriodsOfTime = () => {
const result = [];
for (const day of Object.keys(DaysInWeekEnum)) {
for (const ph of Object.keys(PhTypes)) {
result.push({
day_in_week: DaysInWeekEnum[day],
start: "00:00",
end: "23:59",
ph: PhTypes[ph],
});
}
}
return result;
};
this.getWeekendPeriodsOfTime = () => {
const result = [];
for (const day of Object.keys(OffWeekDays)) {
for (const ph of Object.keys(PhTypes)) {
result.push({
day_in_week: OffWeekDays[day],
start: "00:00",
end: "23:59",
ph: PhTypes[ph],
});
}
}
return result;
};
}
}
exports.MrParkitGarageTransformation = MrParkitGarageTransformation;
//# sourceMappingURL=MrParkitGarageTransformation.js.map