UNPKG

@golemio/parkings

Version:
127 lines 5.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ParkingLotsTransformation = void 0; const integration_engine_1 = require("@golemio/core/dist/integration-engine"); const _sch_1 = require("../../schema-definitions"); const Geo_1 = require("@golemio/core/dist/output-gateway/Geo"); const config_1 = require("@golemio/core/dist/integration-engine/config"); const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors"); const SourceEnum_1 = require("../../helpers/constants/SourceEnum"); const ParkingLotType = { true: "park_and_ride", false: "park_paid_private", }; class ParkingLotsTransformation extends integration_engine_1.BaseTransformation { constructor() { super(); this.transform = async (data, customGeoFeatures) => { const result = { geo: [], measurements: [], payments: [] }; for (const element of data) { const transformedData = this.transformElement(element); // "optional" geo location enhancement if (customGeoFeatures) { for (const customGeoFeature of customGeoFeatures) { if (customGeoFeature.properties.id === transformedData.geo.id) { transformedData.geo = { ...transformedData.geo, location: customGeoFeature.geometry, }; break; } } } result.geo.push(transformedData.geo); result.measurements.push(transformedData.measurements); if (transformedData.payments) { result.payments.push(transformedData.payments); } } return result; }; this.transformElement = (element) => { const paymentUrlShortname = this.getMPLAPaymentShortName(element.id); const parkingId = `${this.dataSource}-${element.id}`.toLowerCase(); if (isNaN(parseInt(element.lastUpdated, 10))) { throw new golemio_errors_1.GeneralError(`Could not parse date: ${element.lastUpdated}`, "ParkingLotsTransformation"); } const dateModified = new Date(element.lastUpdated).toISOString(); // location is always a Point, so no need to use turf for centroid return { geo: { id: parkingId, source: this.dataSource, source_id: "" + element.id, data_provider: "www.tsk-praha.cz", location: { coordinates: [parseFloat(element.lng), parseFloat(element.lat)], type: Geo_1.GeoCoordinatesType.Point, }, total_spot_number: element.totalNumOfPlaces, name: element.name, category: ParkingLotType[element.pr], parking_type: ParkingLotType[element.pr], centroid: { coordinates: [parseFloat(element.lng), parseFloat(element.lat)], type: Geo_1.GeoCoordinatesType.Point, }, date_modified: dateModified, active: true, }, measurements: { source: this.dataSource, source_id: "" + element.id, parking_id: parkingId, available_spot_number: element.numOfFreePlaces, occupied_spot_number: element.numOfTakenPlaces, total_spot_number: element.totalNumOfPlaces, date_modified: dateModified, }, ...(paymentUrlShortname && { payments: { parking_id: parkingId, source: this.dataSource, payment_web_url: `${config_1.config.PARKINGS_PAYMENT_URL}?shortname=${paymentUrlShortname}`, }, }), }; }; this.getMPLAPaymentShortName = (id) => { switch (id) { case 534002: return "139"; // Holešovice case 534004: return "142"; // Rajska Zahrada case 534007: return "141"; // Radotín case 534008: return "144"; // Zličín 1 case 534009: return "145"; // Zličín 2 case 534010: return "143"; // Skalka 2 case 534011: return "147"; // Černý most case 534012: return "143"; // Skalka 1 case 534014: return "121"; // Ládví case 534015: return "122"; // Depo Hostivař case 534016: return "123"; // Letňany case 534017: return "106"; // Westfield Chodov case 5340171: return "106"; // Chodov A case 5340172: return "106"; // Chodov E default: return null; } }; this.name = _sch_1.Parkings.tsk.name + "Data"; this.dataSource = SourceEnum_1.SourceEnum.TSK; } } exports.ParkingLotsTransformation = ParkingLotsTransformation; //# sourceMappingURL=ParkingLotsTransformation.js.map