@golemio/parkings 1.25.0 → 1.25.1-dev.2404804329
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/db/migrations/postgresql/20260211120930-tsk-v2-name-street.js +53 -0
- package/db/migrations/postgresql/sqls/20260211120930-tsk-v2-name-street-down.sql +56 -0
- package/db/migrations/postgresql/sqls/20260211120930-tsk-v2-name-street-up.sql +53 -0
- package/dist/integration-engine/helpers/StreetNameHelper.d.ts +7 -0
- package/dist/integration-engine/helpers/StreetNameHelper.js +27 -0
- package/dist/integration-engine/helpers/StreetNameHelper.js.map +1 -0
- package/dist/integration-engine/transformations/TskParkingSectionTransformation.d.ts +3 -1
- package/dist/integration-engine/transformations/TskParkingSectionTransformation.js +11 -3
- package/dist/integration-engine/transformations/TskParkingSectionTransformation.js.map +1 -1
- package/dist/integration-engine/workers/TskParkingWorker.js +4 -1
- package/dist/integration-engine/workers/TskParkingWorker.js.map +1 -1
- package/dist/integration-engine/workers/tasks/SaveTskParkingSectionsTask.d.ts +6 -1
- package/dist/integration-engine/workers/tasks/SaveTskParkingSectionsTask.js +18 -2
- package/dist/integration-engine/workers/tasks/SaveTskParkingSectionsTask.js.map +1 -1
- package/docs/openapi-output.yaml +41 -44
- package/package.json +1 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var dbm;
|
|
4
|
+
var type;
|
|
5
|
+
var seed;
|
|
6
|
+
var fs = require('fs');
|
|
7
|
+
var path = require('path');
|
|
8
|
+
var Promise;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* We receive the dbmigrate dependency from dbmigrate initially.
|
|
12
|
+
* This enables us to not have to rely on NODE_PATH.
|
|
13
|
+
*/
|
|
14
|
+
exports.setup = function(options, seedLink) {
|
|
15
|
+
dbm = options.dbmigrate;
|
|
16
|
+
type = dbm.dataType;
|
|
17
|
+
seed = seedLink;
|
|
18
|
+
Promise = options.Promise;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
exports.up = function(db) {
|
|
22
|
+
var filePath = path.join(__dirname, 'sqls', '20260211120930-tsk-v2-name-street-up.sql');
|
|
23
|
+
return new Promise( function( resolve, reject ) {
|
|
24
|
+
fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
|
|
25
|
+
if (err) return reject(err);
|
|
26
|
+
console.log('received data: ' + data);
|
|
27
|
+
|
|
28
|
+
resolve(data);
|
|
29
|
+
});
|
|
30
|
+
})
|
|
31
|
+
.then(function(data) {
|
|
32
|
+
return db.runSql(data);
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
exports.down = function(db) {
|
|
37
|
+
var filePath = path.join(__dirname, 'sqls', '20260211120930-tsk-v2-name-street-down.sql');
|
|
38
|
+
return new Promise( function( resolve, reject ) {
|
|
39
|
+
fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
|
|
40
|
+
if (err) return reject(err);
|
|
41
|
+
console.log('received data: ' + data);
|
|
42
|
+
|
|
43
|
+
resolve(data);
|
|
44
|
+
});
|
|
45
|
+
})
|
|
46
|
+
.then(function(data) {
|
|
47
|
+
return db.runSql(data);
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
exports._meta = {
|
|
52
|
+
"version": 1
|
|
53
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
DROP VIEW v_parkings_api_v2;
|
|
2
|
+
|
|
3
|
+
CREATE VIEW v_parkings_api_v2 AS
|
|
4
|
+
SELECT
|
|
5
|
+
-- all original columns except those we override
|
|
6
|
+
p.id,
|
|
7
|
+
p.source,
|
|
8
|
+
p.source_id,
|
|
9
|
+
p.data_provider,
|
|
10
|
+
p.date_modified,
|
|
11
|
+
p.address,
|
|
12
|
+
p.location,
|
|
13
|
+
p.area_served,
|
|
14
|
+
p.total_spot_number,
|
|
15
|
+
p.create_batch_id,
|
|
16
|
+
p.created_at,
|
|
17
|
+
p.created_by,
|
|
18
|
+
p.update_batch_id,
|
|
19
|
+
p.updated_at,
|
|
20
|
+
p.updated_by,
|
|
21
|
+
p.valid_from,
|
|
22
|
+
p.valid_to,
|
|
23
|
+
p.parking_type,
|
|
24
|
+
p.centroid,
|
|
25
|
+
p."security",
|
|
26
|
+
p.max_vehicle_dimensions,
|
|
27
|
+
p.covered,
|
|
28
|
+
p.contact,
|
|
29
|
+
p.parking_policy,
|
|
30
|
+
p.sanitized_location,
|
|
31
|
+
p.area,
|
|
32
|
+
p.address_updated_at,
|
|
33
|
+
p.active,
|
|
34
|
+
-- overrides for tsk_v2
|
|
35
|
+
CASE WHEN p.source = 'tsk_v2' THEN p.name ELSE p.source_id END AS source_id_mapped,
|
|
36
|
+
CASE
|
|
37
|
+
WHEN p.source = 'tsk_v2' THEN COALESCE(p.address->>'street_address', p.name)
|
|
38
|
+
ELSE p.name
|
|
39
|
+
END AS name,
|
|
40
|
+
CASE
|
|
41
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'violet' THEN 'zone_mixed'
|
|
42
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'blue' THEN 'zone_residential'
|
|
43
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'orange' THEN 'zone_visitors'
|
|
44
|
+
WHEN p.source = 'tsk_v2' THEN 'zone_other'
|
|
45
|
+
ELSE p.zone_type
|
|
46
|
+
END AS zone_type,
|
|
47
|
+
CASE
|
|
48
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'violet' THEN 'zone_mixed'
|
|
49
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'blue' THEN 'zone_residential'
|
|
50
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'orange' THEN 'zone_visitors'
|
|
51
|
+
WHEN p.source = 'tsk_v2' THEN 'zone_other'
|
|
52
|
+
ELSE p.category
|
|
53
|
+
END AS category
|
|
54
|
+
FROM parkings p
|
|
55
|
+
JOIN parking_sources ps ON p.source = ps.source
|
|
56
|
+
WHERE p.active = true and ps.legacy_api_allowed = true;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
DROP VIEW v_parkings_api_v2;
|
|
2
|
+
|
|
3
|
+
CREATE VIEW v_parkings_api_v2 AS
|
|
4
|
+
SELECT
|
|
5
|
+
-- all original columns except those we override
|
|
6
|
+
p.id,
|
|
7
|
+
p.source,
|
|
8
|
+
p.source_id,
|
|
9
|
+
p.data_provider,
|
|
10
|
+
p.date_modified,
|
|
11
|
+
p.address,
|
|
12
|
+
p.location,
|
|
13
|
+
p.area_served,
|
|
14
|
+
p.total_spot_number,
|
|
15
|
+
p.create_batch_id,
|
|
16
|
+
p.created_at,
|
|
17
|
+
p.created_by,
|
|
18
|
+
p.update_batch_id,
|
|
19
|
+
p.updated_at,
|
|
20
|
+
p.updated_by,
|
|
21
|
+
p.valid_from,
|
|
22
|
+
p.valid_to,
|
|
23
|
+
p.parking_type,
|
|
24
|
+
p.centroid,
|
|
25
|
+
p."security",
|
|
26
|
+
p.max_vehicle_dimensions,
|
|
27
|
+
p.covered,
|
|
28
|
+
p.contact,
|
|
29
|
+
p.parking_policy,
|
|
30
|
+
p.sanitized_location,
|
|
31
|
+
p.area,
|
|
32
|
+
p.address_updated_at,
|
|
33
|
+
p.active,
|
|
34
|
+
-- overrides for tsk_v2
|
|
35
|
+
CASE WHEN p.source = 'tsk_v2' THEN SPLIT_PART(p.name, '; ', 1) ELSE p.source_id END AS source_id_mapped,
|
|
36
|
+
p.name,
|
|
37
|
+
CASE
|
|
38
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'violet' THEN 'zone_mixed'
|
|
39
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'blue' THEN 'zone_residential'
|
|
40
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'orange' THEN 'zone_visitors'
|
|
41
|
+
WHEN p.source = 'tsk_v2' THEN 'zone_other'
|
|
42
|
+
ELSE p.zone_type
|
|
43
|
+
END AS zone_type,
|
|
44
|
+
CASE
|
|
45
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'violet' THEN 'zone_mixed'
|
|
46
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'blue' THEN 'zone_residential'
|
|
47
|
+
WHEN p.source = 'tsk_v2' AND p.category = 'orange' THEN 'zone_visitors'
|
|
48
|
+
WHEN p.source = 'tsk_v2' THEN 'zone_other'
|
|
49
|
+
ELSE p.category
|
|
50
|
+
END AS category
|
|
51
|
+
FROM parkings p
|
|
52
|
+
JOIN parking_sources ps ON p.source = ps.source
|
|
53
|
+
WHERE p.active = true and ps.legacy_api_allowed = true;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ITskParkingSectionLevel } from "../../schema-definitions/datasources/interfaces/ITskParkingSectionLevel";
|
|
2
|
+
/**
|
|
3
|
+
* Groups section items by their parent section (idSection) and determines the unified street name.
|
|
4
|
+
* - If all items in a section share the same non-null streetNameValid, that value is used.
|
|
5
|
+
* - Otherwise (multiple streets, any null), the section gets no street name.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildStreetNameMap(sectionItems: ITskParkingSectionLevel[]): Map<string, string | null>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildStreetNameMap = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Groups section items by their parent section (idSection) and determines the unified street name.
|
|
6
|
+
* - If all items in a section share the same non-null streetNameValid, that value is used.
|
|
7
|
+
* - Otherwise (multiple streets, any null), the section gets no street name.
|
|
8
|
+
*/
|
|
9
|
+
function buildStreetNameMap(sectionItems) {
|
|
10
|
+
const grouped = new Map();
|
|
11
|
+
for (const item of sectionItems) {
|
|
12
|
+
const existing = grouped.get(item.idSection);
|
|
13
|
+
if (existing) {
|
|
14
|
+
existing.add(item.streetNameValid);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
grouped.set(item.idSection, new Set([item.streetNameValid]));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const result = new Map();
|
|
21
|
+
for (const [idSection, streetNames] of grouped) {
|
|
22
|
+
result.set(idSection, streetNames.size === 1 && !streetNames.has(null) ? streetNames.values().next().value : null);
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
exports.buildStreetNameMap = buildStreetNameMap;
|
|
27
|
+
//# sourceMappingURL=StreetNameHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreetNameHelper.js","sourceRoot":"","sources":["../../../src/integration-engine/helpers/StreetNameHelper.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,YAAuC;IACtE,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEtD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;QAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACtC;aAAM;YACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;SAChE;KACJ;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,OAAO,EAAE;QAC5C,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KACtH;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAjBD,gDAiBC"}
|
|
@@ -4,9 +4,11 @@ import { IParkingTariffRelation } from "../../schema-definitions/models/interfac
|
|
|
4
4
|
import { AbstractTransformation } from "@golemio/core/dist/helpers/transformation/AbstractTransformation";
|
|
5
5
|
export declare class TskParkingSectionTransformation extends AbstractTransformation<ITskParkingSection, IParking> {
|
|
6
6
|
private transformationDate;
|
|
7
|
+
private streetNameMap;
|
|
7
8
|
name: string;
|
|
8
|
-
constructor(transformationDate: Date);
|
|
9
|
+
constructor(transformationDate: Date, streetNameMap: Map<string, string | null>);
|
|
9
10
|
protected transformInternal: (section: ITskParkingSection) => IParking;
|
|
10
11
|
transformParkingTariffsRelation: (sections: ITskParkingSection[]) => IParkingTariffRelation[];
|
|
12
|
+
private buildName;
|
|
11
13
|
private getSectionCat;
|
|
12
14
|
}
|
|
@@ -18,9 +18,10 @@ const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
|
18
18
|
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
19
19
|
const wkt_1 = require("@terraformer/wkt");
|
|
20
20
|
let TskParkingSectionTransformation = exports.TskParkingSectionTransformation = class TskParkingSectionTransformation extends AbstractTransformation_1.AbstractTransformation {
|
|
21
|
-
constructor(transformationDate) {
|
|
21
|
+
constructor(transformationDate, streetNameMap) {
|
|
22
22
|
super();
|
|
23
23
|
this.transformationDate = transformationDate;
|
|
24
|
+
this.streetNameMap = streetNameMap;
|
|
24
25
|
this.name = "TskParkingSectionTransformation";
|
|
25
26
|
this.transformInternal = (section) => {
|
|
26
27
|
const location = (0, wkt_1.wktToGeoJSON)(section.borderWKT);
|
|
@@ -34,7 +35,7 @@ let TskParkingSectionTransformation = exports.TskParkingSectionTransformation =
|
|
|
34
35
|
source_id: section.idSection,
|
|
35
36
|
data_provider: "www.tsk-praha.cz",
|
|
36
37
|
location,
|
|
37
|
-
name: section
|
|
38
|
+
name: this.buildName(section),
|
|
38
39
|
total_spot_number: section.projectedCapacity,
|
|
39
40
|
category: this.getSectionCat(section.sectionCat),
|
|
40
41
|
valid_from,
|
|
@@ -61,6 +62,13 @@ let TskParkingSectionTransformation = exports.TskParkingSectionTransformation =
|
|
|
61
62
|
return parkingTariffsIdPairs;
|
|
62
63
|
};
|
|
63
64
|
}
|
|
65
|
+
buildName(section) {
|
|
66
|
+
const streetName = this.streetNameMap.get(section.idSection);
|
|
67
|
+
if (streetName) {
|
|
68
|
+
return `${section.sectionCode}; ${streetName}`;
|
|
69
|
+
}
|
|
70
|
+
return section.sectionCode;
|
|
71
|
+
}
|
|
64
72
|
getSectionCat(catNo) {
|
|
65
73
|
switch (catNo) {
|
|
66
74
|
case 1:
|
|
@@ -80,6 +88,6 @@ let TskParkingSectionTransformation = exports.TskParkingSectionTransformation =
|
|
|
80
88
|
};
|
|
81
89
|
exports.TskParkingSectionTransformation = TskParkingSectionTransformation = __decorate([
|
|
82
90
|
(0, tsyringe_1.injectable)(),
|
|
83
|
-
__metadata("design:paramtypes", [Date])
|
|
91
|
+
__metadata("design:paramtypes", [Date, Map])
|
|
84
92
|
], TskParkingSectionTransformation);
|
|
85
93
|
//# sourceMappingURL=TskParkingSectionTransformation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TskParkingSectionTransformation.js","sourceRoot":"","sources":["../../../src/integration-engine/transformations/TskParkingSectionTransformation.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mEAA2D;AAC3D,4DAA8D;AAI9D,wDAAsD;AACtD,6GAA0G;AAE1G,6EAAwE;AACxE,iEAAgE;AAChE,0CAAgD;AAGzC,IAAM,+BAA+B,6CAArC,MAAM,+BAAgC,SAAQ,+CAAoD;IAGrG,YAAoB,kBAAwB;
|
|
1
|
+
{"version":3,"file":"TskParkingSectionTransformation.js","sourceRoot":"","sources":["../../../src/integration-engine/transformations/TskParkingSectionTransformation.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,10 @@ class TskParkingWorker extends integration_engine_1.AbstractWorker {
|
|
|
15
15
|
constructor() {
|
|
16
16
|
super();
|
|
17
17
|
this.name = "TskParkingWorker";
|
|
18
|
-
const saveTskParkingSectionsTask = new SaveTskParkingSectionsTask_1.SaveTskParkingSectionsTask(this.getQueuePrefix(), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.TskParkingSectionsDataSource),
|
|
18
|
+
const saveTskParkingSectionsTask = new SaveTskParkingSectionsTask_1.SaveTskParkingSectionsTask(this.getQueuePrefix(), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.TskParkingSectionsDataSource), [
|
|
19
|
+
Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.TskParkingSectionLevel251DataSource),
|
|
20
|
+
Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.TskParkingSectionLevel253DataSource),
|
|
21
|
+
], Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.ParkingsRepository), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.ParkingTariffRelationsRepository), ioc_1.IntegrationEngineContainer.resolve(CoreToken_1.CoreToken.SimpleConfig), ioc_1.IntegrationEngineContainer.resolve(CoreToken_1.CoreToken.Logger));
|
|
19
22
|
const saveTskParkingSectionLevel251Task = new SaveTskParkingSectionLevelTask_1.SaveTskParkingSectionLevelTask("saveTskParkingSectionLevel251", this.getQueuePrefix(), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.TskParkingSectionLevel251DataSource), new TskParkingSectionLevelTransformation_1.TskParkingSectionLevelTransformation(), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.ParkingsLocationRepository), ioc_1.IntegrationEngineContainer.resolve(CoreToken_1.CoreToken.SimpleConfig));
|
|
20
23
|
const saveTskParkingSectionLevel253Task = new SaveTskParkingSectionLevelTask_1.SaveTskParkingSectionLevelTask("saveTskParkingSectionLevel253", this.getQueuePrefix(), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.TskParkingSectionLevel253DataSource), new TskParkingSectionLevelTransformation_1.TskParkingSectionLevelTransformation("disabled"), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.ParkingsLocationRepository), ioc_1.IntegrationEngineContainer.resolve(CoreToken_1.CoreToken.SimpleConfig));
|
|
21
24
|
const saveTskParkingMachinesTask = new SaveTskParkingMachinesTask_1.SaveTskParkingMachinesTask(this.getQueuePrefix(), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.TskParkingMachinesDataSource), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.TskParkingMachinesTransformation), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.ParkingMachinesRepository), Di_1.ParkingsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.ParkingTariffRelationsRepository));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TskParkingWorker.js","sourceRoot":"","sources":["../../../src/integration-engine/workers/TskParkingWorker.ts"],"names":[],"mappings":";;;AAAA,kCAA+C;AAC/C,sEAAoE;AACpE,kHAAgH;AAChH,mFAA0F;AAC1F,2FAAkG;AAClG,mFAA0F;AAC1F,2FAAkG;
|
|
1
|
+
{"version":3,"file":"TskParkingWorker.js","sourceRoot":"","sources":["../../../src/integration-engine/workers/TskParkingWorker.ts"],"names":[],"mappings":";;;AAAA,kCAA+C;AAC/C,sEAAoE;AACpE,kHAAgH;AAChH,mFAA0F;AAC1F,2FAAkG;AAClG,mFAA0F;AAC1F,2FAAkG;AAGlG,wEAAqE;AACrE,8EAAuE;AACvE,mEAAuF;AAEvF,MAAa,gBAAiB,SAAQ,mCAAc;IAGhD;QACI,KAAK,EAAE,CAAC;QAHO,SAAI,GAAW,kBAAkB,CAAC;QAKjD,MAAM,0BAA0B,GAAG,IAAI,uDAA0B,CAC7D,IAAI,CAAC,cAAc,EAAE,EACrB,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,4BAA4B,CAAC,EAC5E;YACI,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,mCAAmC,CAAC;YACnF,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,mCAAmC,CAAC;SACtF,EACD,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,kBAAkB,CAAC,EAClE,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,gCAAgC,CAAC,EAChF,gCAA0B,CAAC,OAAO,CAAgB,qBAAS,CAAC,YAAY,CAAC,EACzE,gCAA0B,CAAC,OAAO,CAAU,qBAAS,CAAC,MAAM,CAAC,CAChE,CAAC;QAEF,MAAM,iCAAiC,GAAG,IAAI,+DAA8B,CACxE,+BAA+B,EAC/B,IAAI,CAAC,cAAc,EAAE,EACrB,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,mCAAmC,CAAC,EACnF,IAAI,2EAAoC,EAAE,EAC1C,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,0BAA0B,CAAC,EAC1E,gCAA0B,CAAC,OAAO,CAAgB,qBAAS,CAAC,YAAY,CAAC,CAC5E,CAAC;QAEF,MAAM,iCAAiC,GAAG,IAAI,+DAA8B,CACxE,+BAA+B,EAC/B,IAAI,CAAC,cAAc,EAAE,EACrB,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,mCAAmC,CAAC,EACnF,IAAI,2EAAoC,CAAC,UAAU,CAAC,EACpD,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,0BAA0B,CAAC,EAC1E,gCAA0B,CAAC,OAAO,CAAgB,qBAAS,CAAC,YAAY,CAAC,CAC5E,CAAC;QAEF,MAAM,0BAA0B,GAAG,IAAI,uDAA0B,CAC7D,IAAI,CAAC,cAAc,EAAE,EACrB,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,4BAA4B,CAAC,EAC5E,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,gCAAgC,CAAC,EAChF,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,yBAAyB,CAAC,EACzE,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,gCAAgC,CAAC,CACnF,CAAC;QAEF,MAAM,8BAA8B,GAAG,IAAI,+DAA8B,CACrE,IAAI,CAAC,cAAc,EAAE,EACrB,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,gCAAgC,CAAC,EAChF,sBAAiB,CAAC,OAAO,CAAC,2CAAoB,CAAC,wBAAwB,CAAC,CAC3E,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC;IACtD,CAAC;CACJ;AAzDD,4CAyDC"}
|
|
@@ -3,13 +3,18 @@ import { AbstractEmptyTask } from "@golemio/core/dist/integration-engine";
|
|
|
3
3
|
import { DataSource } from "@golemio/core/dist/integration-engine/datasources";
|
|
4
4
|
import { ParkingsRepository } from "../../repositories/ParkingsRepository";
|
|
5
5
|
import { ITskParkingSection } from "../../../schema-definitions/datasources/interfaces/ITskParkingSection";
|
|
6
|
+
import { ITskParkingSectionLevel } from "../../../schema-definitions/datasources/interfaces/ITskParkingSectionLevel";
|
|
6
7
|
import { ISimpleConfig } from "@golemio/core/dist/helpers/configuration/ISimpleConfig";
|
|
8
|
+
import { ILogger } from "@golemio/core/dist/helpers";
|
|
7
9
|
export declare class SaveTskParkingSectionsTask extends AbstractEmptyTask {
|
|
8
10
|
private dataSource;
|
|
11
|
+
private sectionLevelDataSources;
|
|
9
12
|
private parkingsRepository;
|
|
10
13
|
private parkingTariffRelationsRepository;
|
|
11
14
|
private config;
|
|
15
|
+
private log;
|
|
12
16
|
readonly queueName = "saveTskParkingSections";
|
|
13
|
-
constructor(queuePrefix: string, dataSource: DataSource<ITskParkingSection[]>, parkingsRepository: ParkingsRepository, parkingTariffRelationsRepository: ParkingTariffRelationsRepository, config: ISimpleConfig);
|
|
17
|
+
constructor(queuePrefix: string, dataSource: DataSource<ITskParkingSection[]>, sectionLevelDataSources: Array<DataSource<ITskParkingSectionLevel[]>>, parkingsRepository: ParkingsRepository, parkingTariffRelationsRepository: ParkingTariffRelationsRepository, config: ISimpleConfig, log: ILogger);
|
|
14
18
|
execute(): Promise<void>;
|
|
19
|
+
private fetchStreetNameMap;
|
|
15
20
|
}
|
|
@@ -2,26 +2,30 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SaveTskParkingSectionsTask = void 0;
|
|
4
4
|
const integration_engine_1 = require("@golemio/core/dist/integration-engine");
|
|
5
|
+
const StreetNameHelper_1 = require("../../helpers/StreetNameHelper");
|
|
5
6
|
const TskParkingSectionTransformation_1 = require("../../transformations/TskParkingSectionTransformation");
|
|
6
7
|
const UpdateAddressWorker_1 = require("../UpdateAddressWorker");
|
|
7
8
|
const SourceEnum_1 = require("../../../helpers/constants/SourceEnum");
|
|
8
9
|
const TskParkingFilter_1 = require("../../transformations/TskParkingFilter");
|
|
9
10
|
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
10
11
|
class SaveTskParkingSectionsTask extends integration_engine_1.AbstractEmptyTask {
|
|
11
|
-
constructor(queuePrefix, dataSource, parkingsRepository, parkingTariffRelationsRepository, config) {
|
|
12
|
+
constructor(queuePrefix, dataSource, sectionLevelDataSources, parkingsRepository, parkingTariffRelationsRepository, config, log) {
|
|
12
13
|
super(queuePrefix);
|
|
13
14
|
this.dataSource = dataSource;
|
|
15
|
+
this.sectionLevelDataSources = sectionLevelDataSources;
|
|
14
16
|
this.parkingsRepository = parkingsRepository;
|
|
15
17
|
this.parkingTariffRelationsRepository = parkingTariffRelationsRepository;
|
|
16
18
|
this.config = config;
|
|
19
|
+
this.log = log;
|
|
17
20
|
this.queueName = "saveTskParkingSections";
|
|
18
21
|
}
|
|
19
22
|
async execute() {
|
|
20
23
|
try {
|
|
21
24
|
const processingDate = new Date();
|
|
25
|
+
const streetNameMap = await this.fetchStreetNameMap();
|
|
22
26
|
const sourceData = await this.dataSource.getAll();
|
|
23
27
|
const filteredData = sourceData.filter((parking) => TskParkingFilter_1.TskParkingFilter.isWithinValidityPeriod(parking));
|
|
24
|
-
const transformation = new TskParkingSectionTransformation_1.TskParkingSectionTransformation(processingDate);
|
|
28
|
+
const transformation = new TskParkingSectionTransformation_1.TskParkingSectionTransformation(processingDate, streetNameMap);
|
|
25
29
|
const transformedParkings = transformation.transformArray(filteredData);
|
|
26
30
|
await this.parkingsRepository.saveActiveParkingsWithoutAddress(transformedParkings, SourceEnum_1.SourceEnum.TSK_V2);
|
|
27
31
|
const transformedParkingTariffsRelationData = transformation.transformParkingTariffsRelation(filteredData);
|
|
@@ -36,6 +40,18 @@ class SaveTskParkingSectionsTask extends integration_engine_1.AbstractEmptyTask
|
|
|
36
40
|
throw new golemio_errors_1.GeneralError("Error while saving TSK parking sections", this.constructor.name, error);
|
|
37
41
|
}
|
|
38
42
|
}
|
|
43
|
+
async fetchStreetNameMap() {
|
|
44
|
+
try {
|
|
45
|
+
const results = await Promise.all(this.sectionLevelDataSources.map((ds) => ds.getAll()));
|
|
46
|
+
const sectionLevelData = results.flat();
|
|
47
|
+
const filtered = sectionLevelData.filter((item) => TskParkingFilter_1.TskParkingFilter.isWithinValidityPeriod(item));
|
|
48
|
+
return (0, StreetNameHelper_1.buildStreetNameMap)(filtered);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
this.log.error(new golemio_errors_1.GeneralError(`Error while fetching ${SourceEnum_1.SourceEnum.TSK_V2} street name map`, this.constructor.name, error));
|
|
52
|
+
return new Map();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
39
55
|
}
|
|
40
56
|
exports.SaveTskParkingSectionsTask = SaveTskParkingSectionsTask;
|
|
41
57
|
//# sourceMappingURL=SaveTskParkingSectionsTask.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SaveTskParkingSectionsTask.js","sourceRoot":"","sources":["../../../../src/integration-engine/workers/tasks/SaveTskParkingSectionsTask.ts"],"names":[],"mappings":";;;AACA,8EAAwF;
|
|
1
|
+
{"version":3,"file":"SaveTskParkingSectionsTask.js","sourceRoot":"","sources":["../../../../src/integration-engine/workers/tasks/SaveTskParkingSectionsTask.ts"],"names":[],"mappings":"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"}
|
package/docs/openapi-output.yaml
CHANGED
|
@@ -1431,6 +1431,12 @@ components:
|
|
|
1431
1431
|
has_occupancy_info:
|
|
1432
1432
|
type: boolean
|
|
1433
1433
|
description: 'True if average occupancy info calculated from measurements is available'
|
|
1434
|
+
area:
|
|
1435
|
+
type: number
|
|
1436
|
+
nullable: true
|
|
1437
|
+
description: 'Area of the parking lot in square meters.'
|
|
1438
|
+
address:
|
|
1439
|
+
$ref: '#/components/schemas/ParkingAddress'
|
|
1434
1440
|
required:
|
|
1435
1441
|
- id
|
|
1436
1442
|
- primary_source
|
|
@@ -1640,6 +1646,7 @@ components:
|
|
|
1640
1646
|
nullable: true
|
|
1641
1647
|
items:
|
|
1642
1648
|
type: string
|
|
1649
|
+
example: ["walk", "car"]
|
|
1643
1650
|
level:
|
|
1644
1651
|
type: number
|
|
1645
1652
|
nullable: true
|
|
@@ -1665,47 +1672,41 @@ components:
|
|
|
1665
1672
|
type: object
|
|
1666
1673
|
title: Parking Payment
|
|
1667
1674
|
properties:
|
|
1668
|
-
|
|
1669
|
-
type:
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
discovery_url:
|
|
1681
|
-
type: string
|
|
1682
|
-
nullable: true
|
|
1675
|
+
web_url:
|
|
1676
|
+
type: string
|
|
1677
|
+
nullable: true
|
|
1678
|
+
android_url:
|
|
1679
|
+
type: string
|
|
1680
|
+
nullable: true
|
|
1681
|
+
ios_url:
|
|
1682
|
+
type: string
|
|
1683
|
+
nullable: true
|
|
1684
|
+
discovery_url:
|
|
1685
|
+
type: string
|
|
1686
|
+
nullable: true
|
|
1683
1687
|
ParkingReservation:
|
|
1684
1688
|
type: object
|
|
1685
1689
|
title: Parking Reservation
|
|
1686
1690
|
properties:
|
|
1687
|
-
|
|
1688
|
-
type:
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
discovery_url:
|
|
1707
|
-
type: string
|
|
1708
|
-
nullable: true
|
|
1691
|
+
reservation_type:
|
|
1692
|
+
type: string
|
|
1693
|
+
enum:
|
|
1694
|
+
- possible
|
|
1695
|
+
- not_possible
|
|
1696
|
+
- required
|
|
1697
|
+
nullable: true
|
|
1698
|
+
web_url:
|
|
1699
|
+
type: string
|
|
1700
|
+
nullable: true
|
|
1701
|
+
android_url:
|
|
1702
|
+
type: string
|
|
1703
|
+
nullable: true
|
|
1704
|
+
ios_url:
|
|
1705
|
+
type: string
|
|
1706
|
+
nullable: true
|
|
1707
|
+
discovery_url:
|
|
1708
|
+
type: string
|
|
1709
|
+
nullable: true
|
|
1709
1710
|
ParkingOccupancyMeasurement:
|
|
1710
1711
|
type: object
|
|
1711
1712
|
title: Parking Occupancy
|
|
@@ -1750,15 +1751,15 @@ components:
|
|
|
1750
1751
|
type: string
|
|
1751
1752
|
nullable: true
|
|
1752
1753
|
description: 'Formatted address of the parking location.'
|
|
1753
|
-
|
|
1754
|
+
address_country:
|
|
1754
1755
|
type: string
|
|
1755
1756
|
nullable: true
|
|
1756
1757
|
description: 'Country of the parking location.'
|
|
1757
|
-
|
|
1758
|
+
address_locality:
|
|
1758
1759
|
type: string
|
|
1759
1760
|
nullable: true
|
|
1760
1761
|
description: 'Locality of the parking location.'
|
|
1761
|
-
|
|
1762
|
+
address_region:
|
|
1762
1763
|
type: string
|
|
1763
1764
|
nullable: true
|
|
1764
1765
|
description: 'Region of the parking location.'
|
|
@@ -1770,10 +1771,6 @@ components:
|
|
|
1770
1771
|
type: string
|
|
1771
1772
|
nullable: true
|
|
1772
1773
|
description: 'Street address of the parking location.'
|
|
1773
|
-
area:
|
|
1774
|
-
type: number
|
|
1775
|
-
nullable: false
|
|
1776
|
-
description: 'Area of the parking lot in square meters.'
|
|
1777
1774
|
house_number:
|
|
1778
1775
|
type: string
|
|
1779
1776
|
nullable: true
|