@golemio/fcd 1.0.0 → 1.0.1-dev.423245429
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/CHANGELOG.md +7 -0
- package/db/example/sql_dump.sql +9 -3
- package/dist/integration-engine/transformations/FloatingCarDataInterface.d.ts +25 -12
- package/dist/output-gateway/FCDRouter.js +9 -2
- package/dist/output-gateway/FCDRouter.js.map +1 -1
- package/dist/output-gateway/models/FloatingCarDataModel.d.ts +2 -0
- package/dist/output-gateway/models/FloatingCarDataModel.js +7 -1
- package/dist/output-gateway/models/FloatingCarDataModel.js.map +1 -1
- package/dist/output-gateway/transformations/OutputFloatingCarDataTransformation.d.ts +1 -1
- package/dist/output-gateway/transformations/OutputFloatingCarDataTransformation.js +44 -16
- package/dist/output-gateway/transformations/OutputFloatingCarDataTransformation.js.map +1 -1
- package/docs/openapi.yaml +194 -0
- package/package.json +78 -76
package/CHANGELOG.md
CHANGED
package/db/example/sql_dump.sql
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
INSERT INTO public.fcd_traff_params
|
|
2
|
+
(publication_time, source_identification, measurement_or_calculation_time, predefined_location, version_of_predefined_location, traffic_level, queue_exists, queue_length, from_point, to_point, data_quality, input_values, average_vehicle_speed, travel_time, free_flow_travel_time, free_flow_speed, create_batch_id, created_at, created_by, update_batch_id, updated_at, updated_by)
|
|
3
|
+
VALUES('2021-09-21 01:36:59.000', 'TS10125T10123', '2021-09-21 01:36:01.000', 'TS10125T10123', 2, 'level2', false, NULL, NULL, NULL, 0.5, 1, 35, 31, 23, 46, NULL, '2021-10-18 11:01:16.534', NULL, NULL, '2021-10-18 11:01:16.534', NULL);
|
|
4
|
+
INSERT INTO public.fcd_traff_params
|
|
5
|
+
(publication_time, source_identification, measurement_or_calculation_time, predefined_location, version_of_predefined_location, traffic_level, queue_exists, queue_length, from_point, to_point, data_quality, input_values, average_vehicle_speed, travel_time, free_flow_travel_time, free_flow_speed, create_batch_id, created_at, created_by, update_batch_id, updated_at, updated_by)
|
|
6
|
+
VALUES('2021-09-21 01:36:59.000', 'TS10127T19629', '2021-09-21 01:36:01.000', 'TS10127T19629', 2, 'level1', false, NULL, NULL, NULL, 0.5, 1, 47, 26, 25, 48, NULL, '2021-10-18 11:01:16.534', NULL, NULL, '2021-10-18 11:01:16.534', NULL);
|
|
7
|
+
INSERT INTO public.fcd_traff_params
|
|
8
|
+
(publication_time, source_identification, measurement_or_calculation_time, predefined_location, version_of_predefined_location, traffic_level, queue_exists, queue_length, from_point, to_point, data_quality, input_values, average_vehicle_speed, travel_time, free_flow_travel_time, free_flow_speed, create_batch_id, created_at, created_by, update_batch_id, updated_at, updated_by)
|
|
9
|
+
VALUES('2021-09-21 01:36:59.000', 'TS10182T24828', '2021-09-21 01:36:01.000', 'TS10182T24828', 2, 'level1', false, NULL, NULL, NULL, 0.833, 3, 91, 87, 106, 76, NULL, '2021-10-18 11:01:16.534', NULL, NULL, '2021-10-18 11:01:16.534', NULL);
|
|
@@ -115,19 +115,32 @@ export interface IFloatingCarDataModel {
|
|
|
115
115
|
}
|
|
116
116
|
export declare type IFloatingCarDataModelElaboratedPart = Omit<IFloatingCarDataModel, "publication_time">;
|
|
117
117
|
export interface IOutputApiFloatingCarData {
|
|
118
|
+
modelBaseVersion: string;
|
|
119
|
+
payloadPublicationLight: {
|
|
120
|
+
lang: string;
|
|
121
|
+
publicationTime: string;
|
|
122
|
+
publicationCreator: {
|
|
123
|
+
country: string;
|
|
124
|
+
nationalIdentifier: string;
|
|
125
|
+
};
|
|
126
|
+
elaboratedData: IOutputApiFloatingCarDataElaboratedData[];
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
export interface IOutputApiFloatingCarDataElaboratedData {
|
|
118
130
|
measurementOrCalculationTime: string;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
freeFlowTravelTime: number;
|
|
124
|
-
supplierCalculatedDataQuality: number;
|
|
125
|
-
numberOfInputValuesUsed: number;
|
|
131
|
+
sourceIdentification: string;
|
|
132
|
+
supplierCalculatedDataQuality: string;
|
|
133
|
+
numberOfInputValuesUsed: string;
|
|
134
|
+
predefinedLocationId: string;
|
|
126
135
|
trafficLevel: string;
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
136
|
+
averageVehicleSpeed: string;
|
|
137
|
+
travelTime: string;
|
|
138
|
+
freeFlowTravelTime: string;
|
|
139
|
+
freeFlowSpeed: string;
|
|
140
|
+
queueExists?: string;
|
|
141
|
+
queueLength?: string;
|
|
142
|
+
fromPoint?: string;
|
|
143
|
+
toPoint?: string;
|
|
144
|
+
osmPath?: number[];
|
|
132
145
|
}
|
|
133
146
|
export {};
|
|
@@ -22,7 +22,9 @@ class FCDRouter extends BaseRouter_1.BaseRouter {
|
|
|
22
22
|
super();
|
|
23
23
|
this.GetFloatingCarData = (req, res, next) => __awaiter(this, void 0, void 0, function* () {
|
|
24
24
|
try {
|
|
25
|
+
const isRequestedPathOsm = req.query.osmPath == "true";
|
|
25
26
|
const dataFromDb = yield this.floatingCarDataModel.GetAll({
|
|
27
|
+
locationId: req.query.locationId,
|
|
26
28
|
limit: req.query.limit ? +req.query.limit : undefined,
|
|
27
29
|
offset: req.query.offset ? +req.query.offset : undefined,
|
|
28
30
|
from: req.query.from,
|
|
@@ -31,7 +33,7 @@ class FCDRouter extends BaseRouter_1.BaseRouter {
|
|
|
31
33
|
if (!(dataFromDb === null || dataFromDb === void 0 ? void 0 : dataFromDb.length)) {
|
|
32
34
|
throw new golemio_errors_1.CustomError("No data found", true, "FCDRouter", 404);
|
|
33
35
|
}
|
|
34
|
-
const transformedData = yield this.outputFloatingCarDataTransformation.transform(dataFromDb);
|
|
36
|
+
const transformedData = yield this.outputFloatingCarDataTransformation.transform(dataFromDb, isRequestedPathOsm);
|
|
35
37
|
res.status(200).send(transformedData);
|
|
36
38
|
}
|
|
37
39
|
catch (err) {
|
|
@@ -40,7 +42,12 @@ class FCDRouter extends BaseRouter_1.BaseRouter {
|
|
|
40
42
|
});
|
|
41
43
|
this.floatingCarDataModel = new models_1.FloatingCarDataModel();
|
|
42
44
|
this.outputFloatingCarDataTransformation = new OutputFloatingCarDataTransformation_1.OutputFloatingCarDataTransformation();
|
|
43
|
-
this.router.get("/info", [
|
|
45
|
+
this.router.get("/info", [
|
|
46
|
+
(0, express_validator_1.query)("osmPath").optional().isString(),
|
|
47
|
+
(0, express_validator_1.query)("locationId").optional().isString(),
|
|
48
|
+
(0, express_validator_1.query)("from").optional().isISO8601(),
|
|
49
|
+
(0, express_validator_1.query)("to").optional().isISO8601(),
|
|
50
|
+
], Validation_1.pagination, Validation_1.checkErrors, (0, Validation_1.paginationLimitMiddleware)("FCDRouter"), (0, redis_1.useCacheMiddleware)(), this.GetFloatingCarData);
|
|
44
51
|
}
|
|
45
52
|
}
|
|
46
53
|
exports.FCDRouter = FCDRouter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FCDRouter.js","sourceRoot":"","sources":["../../src/output-gateway/FCDRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,mFAAoE;AACpE,6EAAuE;AACvE,mEAA6E;AAC7E,oFAAiF;AACjF,6EAAkH;AAClH,qCAAgD;AAChD,+GAA8G;AAE9G,MAAa,SAAU,SAAQ,uBAAU;IAIrC;QACI,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"FCDRouter.js","sourceRoot":"","sources":["../../src/output-gateway/FCDRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,mFAAoE;AACpE,6EAAuE;AACvE,mEAA6E;AAC7E,oFAAiF;AACjF,6EAAkH;AAClH,qCAAgD;AAChD,+GAA8G;AAE9G,MAAa,SAAU,SAAQ,uBAAU;IAIrC;QACI,KAAK,EAAE,CAAC;QAoBL,uBAAkB,GAAG,CAAO,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YAClF,IAAI;gBACA,MAAM,kBAAkB,GAAI,GAAG,CAAC,KAAK,CAAC,OAAkB,IAAI,MAAM,CAAC;gBAEnE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;oBACtD,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,UAAoB;oBAC1C,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;oBACrD,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;oBACxD,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAc;oBAC9B,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,EAAY;iBAC7B,CAAC,CAAC;gBACH,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,EAAE;oBACrB,MAAM,IAAI,4BAAW,CAAC,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;iBAClE;gBACD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,mCAAmC,CAAC,SAAS,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;gBACjH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aACzC;YAAC,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,GAAG,CAAC,CAAC;aACb;QACL,CAAC,CAAA,CAAC;QAtCE,IAAI,CAAC,oBAAoB,GAAG,IAAI,6BAAoB,EAAE,CAAC;QACvD,IAAI,CAAC,mCAAmC,GAAG,IAAI,yEAAmC,EAAE,CAAC;QAErF,IAAI,CAAC,MAAM,CAAC,GAAG,CACX,OAAO,EACP;YACI,IAAA,yBAAK,EAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACtC,IAAA,yBAAK,EAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACzC,IAAA,yBAAK,EAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE;YACpC,IAAA,yBAAK,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE;SACrC,EACD,uBAAU,EACV,wBAAW,EACX,IAAA,sCAAyB,EAAC,WAAW,CAAC,EACtC,IAAA,0BAAkB,GAAE,EACpB,IAAI,CAAC,kBAAkB,CAC1B,CAAC;IACN,CAAC;CAsBJ;AA7CD,8BA6CC;AAED,MAAM,SAAS,GAAW,IAAI,SAAS,EAAE,CAAC,MAAM,CAAC;AAExC,8BAAS"}
|
|
@@ -3,6 +3,7 @@ export declare class FloatingCarDataModel extends SequelizeModel {
|
|
|
3
3
|
constructor();
|
|
4
4
|
/**
|
|
5
5
|
* @param {object} [options] Options object with params
|
|
6
|
+
* @param {number} [options.locationId] Predefined Location Id
|
|
6
7
|
* @param {number} [options.limit] Limit
|
|
7
8
|
* @param {number} [options.offset] Offset
|
|
8
9
|
* @param {string} [options.from] ISO date<br>
|
|
@@ -10,6 +11,7 @@ export declare class FloatingCarDataModel extends SequelizeModel {
|
|
|
10
11
|
* @returns Array of the retrieved records
|
|
11
12
|
*/
|
|
12
13
|
GetAll: (options?: {
|
|
14
|
+
locationId?: string;
|
|
13
15
|
limit?: number;
|
|
14
16
|
offset?: number;
|
|
15
17
|
from?: string;
|
|
@@ -22,6 +22,7 @@ class FloatingCarDataModel extends models_1.SequelizeModel {
|
|
|
22
22
|
super(index_1.FCD.fcd_info.name, index_1.FCD.fcd_info.pgTableName, index_1.FCD.fcd_info.outputSequelizeAttributes);
|
|
23
23
|
/**
|
|
24
24
|
* @param {object} [options] Options object with params
|
|
25
|
+
* @param {number} [options.locationId] Predefined Location Id
|
|
25
26
|
* @param {number} [options.limit] Limit
|
|
26
27
|
* @param {number} [options.offset] Offset
|
|
27
28
|
* @param {string} [options.from] ISO date<br>
|
|
@@ -29,12 +30,17 @@ class FloatingCarDataModel extends models_1.SequelizeModel {
|
|
|
29
30
|
* @returns Array of the retrieved records
|
|
30
31
|
*/
|
|
31
32
|
this.GetAll = (options = {}) => __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
const { limit, offset, from, to } = options;
|
|
33
|
+
const { locationId, limit, offset, from, to } = options;
|
|
33
34
|
try {
|
|
34
35
|
const Op = sequelize_1.default.Op;
|
|
35
36
|
const where = {
|
|
36
37
|
[Op.and]: [{}],
|
|
37
38
|
};
|
|
39
|
+
if (locationId) {
|
|
40
|
+
where[Op.and].push({
|
|
41
|
+
predefined_location: locationId,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
38
44
|
if (from) {
|
|
39
45
|
where[Op.and].push({
|
|
40
46
|
measurement_or_calculation_time: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingCarDataModel.js","sourceRoot":"","sources":["../../../src/output-gateway/models/FloatingCarDataModel.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oFAA4D;AAC5D,6EAAuE;AACvE,qEAA0E;AAC1E,0DAAiC;AAEjC,MAAa,oBAAqB,SAAQ,uBAAc;IACpD;QACI,KAAK,CAAC,WAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;QAG/F
|
|
1
|
+
{"version":3,"file":"FloatingCarDataModel.js","sourceRoot":"","sources":["../../../src/output-gateway/models/FloatingCarDataModel.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oFAA4D;AAC5D,6EAAuE;AACvE,qEAA0E;AAC1E,0DAAiC;AAEjC,MAAa,oBAAqB,SAAQ,uBAAc;IACpD;QACI,KAAK,CAAC,WAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;QAG/F;;;;;;;;WAQG;QAEI,WAAM,GAAG,CACZ,UAMI,EAAE,EACM,EAAE;YACd,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;YACxD,IAAI;gBACA,MAAM,EAAE,GAAG,mBAAS,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG;oBACV,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;iBACjB,CAAC;gBAEF,IAAI,UAAU,EAAE;oBACZ,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACf,mBAAmB,EAAE,UAAU;qBAClC,CAAC,CAAC;iBACN;gBAED,IAAI,IAAI,EAAE;oBACN,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACf,+BAA+B,EAAE;4BAC7B,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI;yBACjB;qBACJ,CAAC,CAAC;iBACN;gBAED,IAAI,EAAE,EAAE;oBACJ,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACf,+BAA+B,EAAE;4BAC7B,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;yBACf;qBACJ,CAAC,CAAC;iBACN;gBACD,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;oBAC5D,KAAK;oBACL,MAAM;oBACN,GAAG,EAAE,IAAI;oBACT,KAAK;iBACR,CAAC,CAAC;gBAEH,OAAO,qBAAqB,CAAC;aAChC;YAAC,OAAO,GAAG,EAAE;gBACV,MAAM,IAAI,4BAAW,CAAC,qBAAqB,EAAE,IAAI,EAAE,sBAAsB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACxF;QACL,CAAC,CAAA,CAAC;QAEK,WAAM,GAAG,GAAiC,EAAE;YAC/C,MAAM,IAAI,4BAAW,CAAC,iBAAiB,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC;QAC3E,CAAC,CAAA,CAAC;IAhEF,CAAC;CAiEJ;AApED,oDAoEC"}
|
|
@@ -4,6 +4,6 @@ export declare class OutputFloatingCarDataTransformation {
|
|
|
4
4
|
name: string;
|
|
5
5
|
protected rsdTmcOsmMappingModel: RsdTmcOsmMappingModel;
|
|
6
6
|
constructor();
|
|
7
|
-
transform: (data: IFloatingCarDataModel[]) => Promise<IOutputApiFloatingCarData
|
|
7
|
+
transform: (data: IFloatingCarDataModel[], isRequestedPathOsm: Boolean) => Promise<IOutputApiFloatingCarData>;
|
|
8
8
|
private getRsdTmcOsmMappingModelOptions;
|
|
9
9
|
}
|
|
@@ -15,26 +15,54 @@ const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
|
15
15
|
const models_1 = require("../models");
|
|
16
16
|
class OutputFloatingCarDataTransformation {
|
|
17
17
|
constructor() {
|
|
18
|
-
this.transform = (data) => __awaiter(this, void 0, void 0, function* () {
|
|
19
|
-
const
|
|
18
|
+
this.transform = (data, isRequestedPathOsm) => __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
const elaboratedData = [];
|
|
20
|
+
let latestPublicationTime = data[0].measurement_or_calculation_time;
|
|
20
21
|
for (const item of data) {
|
|
21
|
-
|
|
22
|
+
const itemResultObject = {
|
|
22
23
|
measurementOrCalculationTime: item.measurement_or_calculation_time,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
freeFlowTravelTime: item.free_flow_travel_time,
|
|
28
|
-
supplierCalculatedDataQuality: item.data_quality,
|
|
29
|
-
numberOfInputValuesUsed: item.input_values,
|
|
24
|
+
sourceIdentification: item.source_identification,
|
|
25
|
+
supplierCalculatedDataQuality: item.data_quality.toString(),
|
|
26
|
+
numberOfInputValuesUsed: item.input_values.toString(),
|
|
27
|
+
predefinedLocationId: item.predefined_location,
|
|
30
28
|
trafficLevel: item.traffic_level,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
averageVehicleSpeed: item.average_vehicle_speed.toString(),
|
|
30
|
+
travelTime: item.travel_time.toString(),
|
|
31
|
+
freeFlowTravelTime: item.free_flow_travel_time.toString(),
|
|
32
|
+
freeFlowSpeed: item.free_flow_speed.toString(),
|
|
33
|
+
};
|
|
34
|
+
if (item.queue_exists) {
|
|
35
|
+
itemResultObject.queueExists = item.queue_exists.toString();
|
|
36
|
+
}
|
|
37
|
+
if (item.queue_length) {
|
|
38
|
+
itemResultObject.queueLength = item.queue_length.toString();
|
|
39
|
+
}
|
|
40
|
+
if (item.from_point) {
|
|
41
|
+
itemResultObject.fromPoint = item.from_point.toString();
|
|
42
|
+
}
|
|
43
|
+
if (item.to_point) {
|
|
44
|
+
itemResultObject.toPoint = item.to_point.toString();
|
|
45
|
+
}
|
|
46
|
+
if (isRequestedPathOsm) {
|
|
47
|
+
itemResultObject.osmPath = yield this.rsdTmcOsmMappingModel.GetOne(this.getRsdTmcOsmMappingModelOptions(item.predefined_location));
|
|
48
|
+
}
|
|
49
|
+
elaboratedData.push(itemResultObject);
|
|
50
|
+
if (item.measurement_or_calculation_time > latestPublicationTime) {
|
|
51
|
+
latestPublicationTime = item.measurement_or_calculation_time;
|
|
52
|
+
}
|
|
37
53
|
}
|
|
54
|
+
const result = {
|
|
55
|
+
modelBaseVersion: "3",
|
|
56
|
+
payloadPublicationLight: {
|
|
57
|
+
lang: "cz",
|
|
58
|
+
publicationTime: latestPublicationTime,
|
|
59
|
+
publicationCreator: {
|
|
60
|
+
country: "cz",
|
|
61
|
+
nationalIdentifier: "ŘSD",
|
|
62
|
+
},
|
|
63
|
+
elaboratedData,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
38
66
|
return result;
|
|
39
67
|
});
|
|
40
68
|
this.name = _sch_1.FCD.fcd_info.name;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OutputFloatingCarDataTransformation.js","sourceRoot":"","sources":["../../../src/output-gateway/transformations/OutputFloatingCarDataTransformation.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAA2B;
|
|
1
|
+
{"version":3,"file":"OutputFloatingCarDataTransformation.js","sourceRoot":"","sources":["../../../src/output-gateway/transformations/OutputFloatingCarDataTransformation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
openapi: 3.0.3
|
|
2
|
+
info:
|
|
3
|
+
title: 🚢 Floating Car Data
|
|
4
|
+
description: >-
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
contact:
|
|
7
|
+
name: Golemio Prague Data Plaform
|
|
8
|
+
email: golemio@operatorict.cz
|
|
9
|
+
url: https://golemio.cz
|
|
10
|
+
|
|
11
|
+
servers:
|
|
12
|
+
- url: https://rabin.golemio.cz/v2
|
|
13
|
+
description: Test (development) server
|
|
14
|
+
- url: https://api.golemio.cz/v2
|
|
15
|
+
description: Main (production) server
|
|
16
|
+
|
|
17
|
+
tags:
|
|
18
|
+
- name: 🚢 Floating Car Data
|
|
19
|
+
description: >-
|
|
20
|
+
💡 FCD
|
|
21
|
+
|
|
22
|
+
paths:
|
|
23
|
+
/fcd/info:
|
|
24
|
+
get:
|
|
25
|
+
summary: GET All loating Car Data for a specific period or location
|
|
26
|
+
description: ""
|
|
27
|
+
tags:
|
|
28
|
+
- 🚢 Floating Car Data
|
|
29
|
+
operationId: getFCD
|
|
30
|
+
parameters:
|
|
31
|
+
- name: locationId
|
|
32
|
+
in: query
|
|
33
|
+
description: >-
|
|
34
|
+
Filters data with Predefined Location Id.
|
|
35
|
+
required: false
|
|
36
|
+
schema:
|
|
37
|
+
type: string
|
|
38
|
+
example: TS10125T10123
|
|
39
|
+
- name: osmPath
|
|
40
|
+
in: query
|
|
41
|
+
description: >-
|
|
42
|
+
Includes in the output pathOsm
|
|
43
|
+
required: false
|
|
44
|
+
schema:
|
|
45
|
+
type: boolean
|
|
46
|
+
example: true
|
|
47
|
+
|
|
48
|
+
- name: from
|
|
49
|
+
in: query
|
|
50
|
+
description: >-
|
|
51
|
+
Filters data where the measurement moment is greater than the query-specified moment.
|
|
52
|
+
required: false
|
|
53
|
+
schema:
|
|
54
|
+
type: string
|
|
55
|
+
example: 2021-06-21 10:00
|
|
56
|
+
- name: to
|
|
57
|
+
in: query
|
|
58
|
+
description: >-
|
|
59
|
+
Filters data where the measurement moment is less than the query-specified moment.
|
|
60
|
+
required: false
|
|
61
|
+
schema:
|
|
62
|
+
type: string
|
|
63
|
+
example: 2021-12-21 10:00
|
|
64
|
+
- name: limit
|
|
65
|
+
in: query
|
|
66
|
+
description: >-
|
|
67
|
+
Limits number of retrieved items. The maximum is 10000 (default
|
|
68
|
+
value)
|
|
69
|
+
required: false
|
|
70
|
+
schema:
|
|
71
|
+
type: integer
|
|
72
|
+
format: int64
|
|
73
|
+
example: 10
|
|
74
|
+
- name: offset
|
|
75
|
+
in: query
|
|
76
|
+
description: Number of the first items that are skipped
|
|
77
|
+
required: false
|
|
78
|
+
schema:
|
|
79
|
+
type: integer
|
|
80
|
+
format: int64
|
|
81
|
+
example: 0
|
|
82
|
+
responses:
|
|
83
|
+
"200":
|
|
84
|
+
description: successful operation
|
|
85
|
+
content:
|
|
86
|
+
application/json:
|
|
87
|
+
schema:
|
|
88
|
+
$ref: "#/components/schemas/FloatingCarDataPublication"
|
|
89
|
+
"401":
|
|
90
|
+
$ref: "#/components/responses/UnauthorizedError"
|
|
91
|
+
"404":
|
|
92
|
+
description: Not found
|
|
93
|
+
|
|
94
|
+
components:
|
|
95
|
+
responses:
|
|
96
|
+
UnauthorizedError:
|
|
97
|
+
description: API key is missing or invalid
|
|
98
|
+
headers:
|
|
99
|
+
WWW_Authenticate:
|
|
100
|
+
schema:
|
|
101
|
+
type: string
|
|
102
|
+
|
|
103
|
+
schemas:
|
|
104
|
+
FloatingCarDataPublication:
|
|
105
|
+
type: object
|
|
106
|
+
properties:
|
|
107
|
+
modelBaseVersion:
|
|
108
|
+
type: string
|
|
109
|
+
example: 3
|
|
110
|
+
situationPublicationLight:
|
|
111
|
+
type: object
|
|
112
|
+
properties:
|
|
113
|
+
lang:
|
|
114
|
+
type: string
|
|
115
|
+
example: cz
|
|
116
|
+
publicationTime:
|
|
117
|
+
type: string
|
|
118
|
+
example: "2021-06-21T10:00:37.000Z"
|
|
119
|
+
publicationCreator:
|
|
120
|
+
type: object
|
|
121
|
+
properties:
|
|
122
|
+
country:
|
|
123
|
+
type: string
|
|
124
|
+
example: cz
|
|
125
|
+
nationalIdentifier:
|
|
126
|
+
type: string
|
|
127
|
+
example: ŘSD
|
|
128
|
+
elaboratedData:
|
|
129
|
+
type: array
|
|
130
|
+
items:
|
|
131
|
+
$ref: "#/components/schemas/FCDElaboratedData"
|
|
132
|
+
|
|
133
|
+
FCDElaboratedData:
|
|
134
|
+
type: object
|
|
135
|
+
required:
|
|
136
|
+
[
|
|
137
|
+
measurementOrCalculationTime,
|
|
138
|
+
sourceIdentification,
|
|
139
|
+
supplierCalculatedDataQuality,
|
|
140
|
+
numberOfInputValuesUsed,
|
|
141
|
+
predefinedLocationId,
|
|
142
|
+
trafficLevel,
|
|
143
|
+
averageVehicleSpeed,
|
|
144
|
+
travelTime,
|
|
145
|
+
freeFlowTravelTime,
|
|
146
|
+
freeFlowSpeed,
|
|
147
|
+
]
|
|
148
|
+
properties:
|
|
149
|
+
measurementOrCalculationTime:
|
|
150
|
+
type: string
|
|
151
|
+
example: "2021-06-21T10:00:37.000Z"
|
|
152
|
+
sourceIdentification:
|
|
153
|
+
type: string
|
|
154
|
+
example: "TS01239T25689"
|
|
155
|
+
supplierCalculatedDataQuality:
|
|
156
|
+
type: string
|
|
157
|
+
example: "0.5"
|
|
158
|
+
numberOfInputValuesUsed:
|
|
159
|
+
type: string
|
|
160
|
+
example: "1"
|
|
161
|
+
predefinedLocationId:
|
|
162
|
+
type: string
|
|
163
|
+
example: "TS01239T25689"
|
|
164
|
+
trafficLevel:
|
|
165
|
+
type: string
|
|
166
|
+
example: "level3"
|
|
167
|
+
averageVehicleSpeed:
|
|
168
|
+
type: string
|
|
169
|
+
example: "86"
|
|
170
|
+
travelTime:
|
|
171
|
+
type: string
|
|
172
|
+
example: "116"
|
|
173
|
+
freeFlowTravelTime:
|
|
174
|
+
type: string
|
|
175
|
+
example: "80"
|
|
176
|
+
freeFlowSpeed:
|
|
177
|
+
type: string
|
|
178
|
+
example: "126"
|
|
179
|
+
queueExists:
|
|
180
|
+
type: string
|
|
181
|
+
example: "true"
|
|
182
|
+
queueLength:
|
|
183
|
+
type: string
|
|
184
|
+
example: ""
|
|
185
|
+
fromPoint:
|
|
186
|
+
type: string
|
|
187
|
+
example: ""
|
|
188
|
+
toPoint:
|
|
189
|
+
type: string
|
|
190
|
+
example: ""
|
|
191
|
+
osmPath:
|
|
192
|
+
type: string
|
|
193
|
+
nullable: true
|
|
194
|
+
example: "[30372268, 1945960089, 1663150068, 30372270, 1945960092, 30372272, 1945960105]"
|
package/package.json
CHANGED
|
@@ -1,78 +1,80 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
"
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
2
|
+
"name": "@golemio/fcd",
|
|
3
|
+
"version": "1.0.1-dev.423245429",
|
|
4
|
+
"description": "Golemio Floating Car Data Module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "rimraf ./dist && ttsc -p ./tsconfig.build.json",
|
|
9
|
+
"build-minimal": "run-s 'build --sourceMap false --declaration false'",
|
|
10
|
+
"build-watch": "run-s 'build --watch --preserveWatchOutput'",
|
|
11
|
+
"pretest": "golemio-import-test-data",
|
|
12
|
+
"test": "cross-env NODE_ENV=test TS_NODE_COMPILER='ttypescript' mocha --exit --check-leaks --timeout 120000 -r ts-node/register -r dotenv/config 'test/**/*.test.ts'",
|
|
13
|
+
"apidocs-test": "cross-env NODE_ENV=test TS_NODE_COMPILER='ttypescript' ts-node -r dotenv/config test/api-docs/index.ts",
|
|
14
|
+
"test-debug": "run-s 'test --inspect-brk=9230'",
|
|
15
|
+
"code-coverage": "nyc run-s 'test -r source-map-support/register'",
|
|
16
|
+
"generate-docs": "typedoc --out docs/typedoc src",
|
|
17
|
+
"lint": "eslint '{src,test}/**/*.ts'"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"golemio",
|
|
21
|
+
"fcd"
|
|
22
|
+
],
|
|
23
|
+
"author": "Operator ICT, a.s.",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "https://gitlab.com/operator-ict/golemio/code/modules/fcd"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@commitlint/cli": "^11.0.0",
|
|
31
|
+
"@commitlint/config-conventional": "^11.0.0",
|
|
32
|
+
"@golemio/core": "1.1.8",
|
|
33
|
+
"@golemio/eslint-config": "^1.0.2",
|
|
34
|
+
"@golemio/schema-definitions": "2.0.21",
|
|
35
|
+
"@types/body-parser-xml": "^1.1.0",
|
|
36
|
+
"@types/chai": "4.2.3",
|
|
37
|
+
"@types/chai-as-promised": "7.1.2",
|
|
38
|
+
"@types/mocha": "^8.2.0",
|
|
39
|
+
"@types/node": "^14.14.20",
|
|
40
|
+
"@types/sinon": "^9.0.10",
|
|
41
|
+
"@types/supertest": "^2.0.10",
|
|
42
|
+
"@zerollup/ts-transform-paths": "^1.7.18",
|
|
43
|
+
"body-parser": "^1.19.0",
|
|
44
|
+
"body-parser-xml": "^2.0.0",
|
|
45
|
+
"chai": "4.2.0",
|
|
46
|
+
"chai-as-promised": "7.1.1",
|
|
47
|
+
"cross-env": "^7.0.3",
|
|
48
|
+
"dotenv": "^8.2.0",
|
|
49
|
+
"eslint": "^7.17.0",
|
|
50
|
+
"husky": "^4.3.7",
|
|
51
|
+
"mocha": "^8.2.1",
|
|
52
|
+
"npm-run-all": "^4.1.5",
|
|
53
|
+
"nyc": "^15.1.0",
|
|
54
|
+
"prettier": "^2.2.1",
|
|
55
|
+
"pretty-quick": "^3.1.0",
|
|
56
|
+
"rimraf": "^3.0.2",
|
|
57
|
+
"sinon": "^9.2.3",
|
|
58
|
+
"source-map-support": "0.5.19",
|
|
59
|
+
"supertest": "^6.0.1",
|
|
60
|
+
"ts-node": "^9.1.1",
|
|
61
|
+
"ttypescript": "^1.5.12",
|
|
62
|
+
"typedoc": "^0.21.4",
|
|
63
|
+
"typescript": "^4.1.3"
|
|
64
|
+
},
|
|
65
|
+
"peerDependencies": {
|
|
66
|
+
"@golemio/core": "^1.0.5"
|
|
67
|
+
},
|
|
68
|
+
"dependencies": {
|
|
69
|
+
"@apideck/portman": "^1.12.0",
|
|
70
|
+
"ajv": "^8.2.0",
|
|
71
|
+
"xmldom": "github:xmldom/xmldom#0.7.0",
|
|
72
|
+
"xsd2jsonschema": "^0.3.7"
|
|
73
|
+
},
|
|
74
|
+
"resolutions": {
|
|
75
|
+
"@commitlint/cli/**/trim-newlines": "^3.0.1",
|
|
76
|
+
"hosted-git-info": "^3.0.8",
|
|
77
|
+
"xmldom": "github:xmldom/xmldom#0.7.0",
|
|
78
|
+
"mpath": "^0.8.4"
|
|
79
|
+
}
|
|
78
80
|
}
|