@golemio/parkings 1.24.6-dev.2336551336 → 1.24.6-dev.2343672087
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 +10 -7
- 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":";;;;;;;;;;;;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,EAAU,aAAyC;QAC3F,KAAK,EAAE,CAAC;QADQ,uBAAkB,GAAlB,kBAAkB,CAAM;QAAU,kBAAa,GAAb,aAAa,CAA4B;QAF/F,SAAI,GAAW,iCAAiC,CAAC;QAMvC,sBAAiB,GAAG,CAAC,OAA2B,EAAY,EAAE;YACpE,MAAM,QAAQ,GAAG,IAAA,kBAAY,EAAC,OAAO,CAAC,SAAS,CAAoB,CAAC;YACpE,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS;gBAChC,CAAC,CAAC,kBAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,WAAW,EAAE;gBAClF,CAAC,CAAC,IAAI,CAAC;YACX,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAEzH,OAAO;gBACH,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW;gBACjC,MAAM,EAAE,uBAAU,CAAC,MAAM;gBACzB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,aAAa,EAAE,kBAAkB;gBACjC,QAAQ;gBACR,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC7B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;gBAC5C,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC;gBAChD,UAAU;gBACV,QAAQ;gBACR,YAAY,EAAE,WAAW;gBACzB,SAAS,EAAE,MAAM;gBACjB,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;gBACpD,QAAQ,EAAE,IAAA,iCAAiB,EAAC,QAAQ,CAAC;gBACrC,cAAc,EAAE,MAAM;gBACtB,MAAM,EAAE,IAAI;aACf,CAAC;QACN,CAAC,CAAC;QAEK,oCAA+B,GAAG,CAAC,QAA8B,EAA4B,EAAE;YAClG,MAAM,qBAAqB,GAAG,EAAE,CAAC;YACjC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC5B,IAAI,OAAO,CAAC,QAAQ,EAAE;oBAClB,qBAAqB,CAAC,IAAI,CAAC;wBACvB,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW;wBACzC,SAAS,EAAE,OAAO,CAAC,QAAQ;wBAC3B,MAAM,EAAE,uBAAU,CAAC,MAAM;qBAC5B,CAAC,CAAC;iBACN;aACJ;YAED,OAAO,qBAAqB,CAAC;QACjC,CAAC,CAAC;IA1CF,CAAC;IA4CO,SAAS,CAAC,OAA2B;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,UAAU,EAAE;YACZ,OAAO,GAAG,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;SAClD;QACD,OAAO,OAAO,CAAC,WAAW,CAAC;IAC/B,CAAC;IAEO,aAAa,CAAC,KAAa;QAC/B,QAAQ,KAAK,EAAE;YACX,KAAK,CAAC;gBACF,OAAO,MAAM,CAAC;YAClB,KAAK,CAAC;gBACF,OAAO,QAAQ,CAAC;YACpB,KAAK,CAAC;gBACF,OAAO,QAAQ,CAAC;YACpB,KAAK,CAAC;gBACF,OAAO,OAAO,CAAC;YACnB,KAAK,CAAC;gBACF,OAAO,OAAO,CAAC;YACnB;gBACI,MAAM,IAAI,6BAAY,CAAC,4BAA4B,KAAK,wBAAwB,CAAC,CAAC;SACzF;IACL,CAAC;CACJ,CAAA;0CAzEY,+BAA+B;IAD3C,IAAA,qBAAU,GAAE;qCAI+B,IAAI,EAAyB,GAAG;GAH/D,+BAA+B,CAyE3C"}
|
|
@@ -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
|
|
@@ -1750,15 +1757,15 @@ components:
|
|
|
1750
1757
|
type: string
|
|
1751
1758
|
nullable: true
|
|
1752
1759
|
description: 'Formatted address of the parking location.'
|
|
1753
|
-
|
|
1760
|
+
address_country:
|
|
1754
1761
|
type: string
|
|
1755
1762
|
nullable: true
|
|
1756
1763
|
description: 'Country of the parking location.'
|
|
1757
|
-
|
|
1764
|
+
address_locality:
|
|
1758
1765
|
type: string
|
|
1759
1766
|
nullable: true
|
|
1760
1767
|
description: 'Locality of the parking location.'
|
|
1761
|
-
|
|
1768
|
+
address_region:
|
|
1762
1769
|
type: string
|
|
1763
1770
|
nullable: true
|
|
1764
1771
|
description: 'Region of the parking location.'
|
|
@@ -1770,10 +1777,6 @@ components:
|
|
|
1770
1777
|
type: string
|
|
1771
1778
|
nullable: true
|
|
1772
1779
|
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
1780
|
house_number:
|
|
1778
1781
|
type: string
|
|
1779
1782
|
nullable: true
|