@golemio/parkings 1.24.5 → 1.24.6-dev.2338836604
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 +2 -0
- 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,8 @@ components:
|
|
|
1431
1431
|
has_occupancy_info:
|
|
1432
1432
|
type: boolean
|
|
1433
1433
|
description: 'True if average occupancy info calculated from measurements is available'
|
|
1434
|
+
address:
|
|
1435
|
+
$ref: '#/components/schemas/ParkingAddress'
|
|
1434
1436
|
required:
|
|
1435
1437
|
- id
|
|
1436
1438
|
- primary_source
|