UNPKG

@golemio/parkings

Version:
198 lines 8.09 kB
"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