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