@golemio/pid 4.1.4-dev.2044449114 → 4.1.4-dev.2058905192
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/dist/helpers/GtfsStopParser.d.ts +1 -0
- package/dist/helpers/GtfsStopParser.js +6 -0
- package/dist/helpers/GtfsStopParser.js.map +1 -1
- package/dist/integration-engine/ropid-gtfs/RopidGTFSStopsModel.d.ts +3 -3
- package/dist/integration-engine/ropid-gtfs/RopidGTFSStopsModel.js +11 -3
- package/dist/integration-engine/ropid-gtfs/RopidGTFSStopsModel.js.map +1 -1
- package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/RefreshGtfsStopsCacheTask.js +1 -1
- package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/RefreshGtfsStopsCacheTask.js.map +1 -1
- package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/data-access/cache/GtfsStopsRedisRepository.d.ts +2 -2
- package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/data-access/cache/GtfsStopsRedisRepository.js +4 -0
- package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/data-access/cache/GtfsStopsRedisRepository.js.map +1 -1
- package/dist/output-gateway/pid/controllers/v4/V4TransferBoardsController.d.ts +4 -1
- package/dist/output-gateway/pid/controllers/v4/V4TransferBoardsController.js +35 -18
- package/dist/output-gateway/pid/controllers/v4/V4TransferBoardsController.js.map +1 -1
- package/dist/output-gateway/pid/helpers/TransferBoardFilter.d.ts +5 -2
- package/dist/output-gateway/pid/helpers/TransferBoardFilter.js +52 -1
- package/dist/output-gateway/pid/helpers/TransferBoardFilter.js.map +1 -1
- package/dist/output-gateway/pid/index.d.ts +2 -1
- package/dist/output-gateway/pid/index.js.map +1 -1
- package/dist/output-gateway/pid/service/facade/StopFacade.d.ts +3 -0
- package/dist/output-gateway/pid/service/facade/StopFacade.js +7 -0
- package/dist/output-gateway/pid/service/facade/StopFacade.js.map +1 -1
- package/dist/output-gateway/pid/service/facade/TransferFacade.d.ts +15 -9
- package/dist/output-gateway/pid/service/facade/TransferFacade.js +93 -46
- package/dist/output-gateway/pid/service/facade/TransferFacade.js.map +1 -1
- package/dist/output-gateway/ropid-gtfs/data-access/redis/GtfsStopsRedisRepository.d.ts +2 -0
- package/dist/output-gateway/ropid-gtfs/data-access/redis/GtfsStopsRedisRepository.js +24 -2
- package/dist/output-gateway/ropid-gtfs/data-access/redis/GtfsStopsRedisRepository.js.map +1 -1
- package/dist/schema-definitions/ropid-gtfs/interfaces/IStopDto.d.ts +3 -1
- package/package.json +1 -1
|
@@ -40,6 +40,12 @@ let GtfsStopParser = exports.GtfsStopParser = class GtfsStopParser {
|
|
|
40
40
|
getAswNodeFromId(aswId) {
|
|
41
41
|
return this.parseAswId(aswId).aswNode;
|
|
42
42
|
}
|
|
43
|
+
normalizedStopId(stopId) {
|
|
44
|
+
return stopId
|
|
45
|
+
.split(/[^\d]/g)
|
|
46
|
+
.filter((s) => !!s.length)
|
|
47
|
+
.join("/");
|
|
48
|
+
}
|
|
43
49
|
};
|
|
44
50
|
exports.GtfsStopParser = GtfsStopParser = __decorate([
|
|
45
51
|
(0, tsyringe_1.injectable)()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GtfsStopParser.js","sourceRoot":"","sources":["../../src/helpers/GtfsStopParser.ts"],"names":[],"mappings":";;;;;;;;;AAAA,6EAAwE;AACxE,mEAA8E;AAC9E,iEAAgE;AAChE,oCAAmD;AAG5C,IAAM,cAAc,4BAApB,MAAM,cAAc;IAChB,sBAAsB,CAAC,MAAgB;QAC1C,IAAI,eAAe,GAAmB,EAAE,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YACxB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE;gBACV,SAAS;aACZ;YACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAE9C,eAAe,CAAC,IAAI,CAChB,qBAAS,CAAC,GAAG,CACT,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAC3D,SAAS,IAAI,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAC7E,CACJ,CAAC;SACL;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC;IAEO,cAAc,CAAC,KAAa;QAChC,OAAO,KAAK,IAAI,kBAAU,IAAI,KAAK,IAAI,kBAAU,CAAC;IACtD,CAAC;IAEO,aAAa,CAAC,KAAa,EAAE,MAAc,EAAE,MAAe;QAChE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACrF,MAAM,IAAI,6BAAY,CAAC,mBAAmB,KAAK,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,mBAAmB,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;SAC9G;IACL,CAAC;IAEO,UAAU,CAAC,KAAa;QAI5B,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC;IAEM,gBAAgB,CAAC,KAAa;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;IAC1C,CAAC;CACJ,CAAA;
|
|
1
|
+
{"version":3,"file":"GtfsStopParser.js","sourceRoot":"","sources":["../../src/helpers/GtfsStopParser.ts"],"names":[],"mappings":";;;;;;;;;AAAA,6EAAwE;AACxE,mEAA8E;AAC9E,iEAAgE;AAChE,oCAAmD;AAG5C,IAAM,cAAc,4BAApB,MAAM,cAAc;IAChB,sBAAsB,CAAC,MAAgB;QAC1C,IAAI,eAAe,GAAmB,EAAE,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YACxB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE;gBACV,SAAS;aACZ;YACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAE9C,eAAe,CAAC,IAAI,CAChB,qBAAS,CAAC,GAAG,CACT,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAC3D,SAAS,IAAI,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAC7E,CACJ,CAAC;SACL;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC;IAEO,cAAc,CAAC,KAAa;QAChC,OAAO,KAAK,IAAI,kBAAU,IAAI,KAAK,IAAI,kBAAU,CAAC;IACtD,CAAC;IAEO,aAAa,CAAC,KAAa,EAAE,MAAc,EAAE,MAAe;QAChE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACrF,MAAM,IAAI,6BAAY,CAAC,mBAAmB,KAAK,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,mBAAmB,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;SAC9G;IACL,CAAC;IAEO,UAAU,CAAC,KAAa;QAI5B,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC;IAEM,gBAAgB,CAAC,KAAa;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;IAC1C,CAAC;IAEM,gBAAgB,CAAC,MAAc;QAClC,OAAO,MAAM;aACR,KAAK,CAAC,QAAQ,CAAC;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;aACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;CACJ,CAAA;yBAlDY,cAAc;IAD1B,IAAA,qBAAU,GAAE;GACA,cAAc,CAkD1B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IStopCacheDto, IStopDto } from "../../schema-definitions/ropid-gtfs/interfaces/IStopDto";
|
|
2
2
|
import { IModel, PostgresModel } from "@golemio/core/dist/integration-engine";
|
|
3
3
|
import { IValidator } from "@golemio/core/dist/shared/golemio-validator";
|
|
4
4
|
import Sequelize from "@golemio/core/dist/shared/sequelize";
|
|
@@ -16,7 +16,7 @@ export declare class RopidGTFSStopsModel extends PostgresModel implements IModel
|
|
|
16
16
|
constructor();
|
|
17
17
|
getAll: () => Promise<IStopDto[]>;
|
|
18
18
|
/**
|
|
19
|
-
* Retrieve all
|
|
19
|
+
* Retrieve all stops data needed for cache where location_type is 0 and computed_cis_stop_id is not null
|
|
20
20
|
*/
|
|
21
|
-
|
|
21
|
+
getStopsForCache: () => Promise<IStopCacheDto[]>;
|
|
22
22
|
}
|
|
@@ -36,12 +36,20 @@ let RopidGTFSStopsModel = exports.RopidGTFSStopsModel = class RopidGTFSStopsMode
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
/**
|
|
39
|
-
* Retrieve all
|
|
39
|
+
* Retrieve all stops data needed for cache where location_type is 0 and computed_cis_stop_id is not null
|
|
40
40
|
*/
|
|
41
|
-
this.
|
|
41
|
+
this.getStopsForCache = async () => {
|
|
42
42
|
try {
|
|
43
43
|
const stops = (await this.sequelizeModel.findAll({
|
|
44
|
-
attributes: [
|
|
44
|
+
attributes: [
|
|
45
|
+
"stop_id",
|
|
46
|
+
"asw_node_id",
|
|
47
|
+
"stop_name",
|
|
48
|
+
"platform_code",
|
|
49
|
+
"wheelchair_boarding",
|
|
50
|
+
"zone_id",
|
|
51
|
+
"computed_cis_stop_id",
|
|
52
|
+
],
|
|
45
53
|
raw: true,
|
|
46
54
|
where: {
|
|
47
55
|
location_type: StopEnums_1.GtfsStopLocationType.StopOrPlatform,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RopidGTFSStopsModel.js","sourceRoot":"","sources":["../../../src/integration-engine/ropid-gtfs/RopidGTFSStopsModel.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAA0D;AAC1D,0DAAuC;AACvC,oEAA4C;AAE5C,gFAAyD;AACzD,8EAA8E;AAC9E,6EAAwE;AACxE,mFAA8F;AAC9F,mEAAoE;AACpE,iEAAgE;AAGzD,IAAM,mBAAmB,iCAAzB,MAAM,mBAAoB,SAAQ,kCAAa;IAYlD;QACI,KAAK,CACD,sBAAS,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,EAC9B;YACI,yBAAyB,EAAE,sBAAS,CAAC,KAAK,CAAC,yBAAyB;YACpE,WAAW,EAAE,sBAAS,CAAC,KAAK,CAAC,WAAW;YACxC,QAAQ,EAAE,iBAAS;YACnB,UAAU,EAAE,YAAY;SAC3B,EACD,IAAI,uCAAmB,CAAC,sBAAS,CAAC,KAAK,CAAC,IAAI,GAAG,gBAAgB,EAAE,iBAAO,CAAC,UAAU,CAAC,CACvF,CAAC;QAGC,WAAM,GAAG,KAAK,IAAyB,EAAE;YAC5C,IAAI;gBACA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;aACxC;YAAC,OAAO,GAAG,EAAE;gBACV,MAAM,IAAI,6BAAY,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aAC7E;QACL,CAAC,CAAC;QAEF;;WAEG;QACI,
|
|
1
|
+
{"version":3,"file":"RopidGTFSStopsModel.js","sourceRoot":"","sources":["../../../src/integration-engine/ropid-gtfs/RopidGTFSStopsModel.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAA0D;AAC1D,0DAAuC;AACvC,oEAA4C;AAE5C,gFAAyD;AACzD,8EAA8E;AAC9E,6EAAwE;AACxE,mFAA8F;AAC9F,mEAAoE;AACpE,iEAAgE;AAGzD,IAAM,mBAAmB,iCAAzB,MAAM,mBAAoB,SAAQ,kCAAa;IAYlD;QACI,KAAK,CACD,sBAAS,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,EAC9B;YACI,yBAAyB,EAAE,sBAAS,CAAC,KAAK,CAAC,yBAAyB;YACpE,WAAW,EAAE,sBAAS,CAAC,KAAK,CAAC,WAAW;YACxC,QAAQ,EAAE,iBAAS;YACnB,UAAU,EAAE,YAAY;SAC3B,EACD,IAAI,uCAAmB,CAAC,sBAAS,CAAC,KAAK,CAAC,IAAI,GAAG,gBAAgB,EAAE,iBAAO,CAAC,UAAU,CAAC,CACvF,CAAC;QAGC,WAAM,GAAG,KAAK,IAAyB,EAAE;YAC5C,IAAI;gBACA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;aACxC;YAAC,OAAO,GAAG,EAAE;gBACV,MAAM,IAAI,6BAAY,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aAC7E;QACL,CAAC,CAAC;QAEF;;WAEG;QACI,qBAAgB,GAAG,KAAK,IAAI,EAAE;YACjC,IAAI;gBACA,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;oBAC7C,UAAU,EAAE;wBACR,SAAS;wBACT,aAAa;wBACb,WAAW;wBACX,eAAe;wBACf,qBAAqB;wBACrB,SAAS;wBACT,sBAAsB;qBACzB;oBACD,GAAG,EAAE,IAAI;oBACT,KAAK,EAAE;wBACH,aAAa,EAAE,gCAAoB,CAAC,cAAc;wBAClD,oBAAoB,EAAE,EAAE,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;qBAC3C;iBACJ,CAAC,CAAoB,CAAC;gBAEvB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC9B,OAAO,EAAE,CAAC;iBACb;gBACD,OAAO,KAAK,CAAC;aAChB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,6BAAY,CAAC,mCAAmC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAC7F;QACL,CAAC,CAAC;IAvCF,CAAC;CAwCJ,CAAA;8BA/DY,mBAAmB;IAD/B,IAAA,qBAAU,GAAE;;GACA,mBAAmB,CA+D/B"}
|
package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/RefreshGtfsStopsCacheTask.js
CHANGED
|
@@ -30,7 +30,7 @@ let RefreshGtfsStopsCacheTask = exports.RefreshGtfsStopsCacheTask = class Refres
|
|
|
30
30
|
}
|
|
31
31
|
async execute() {
|
|
32
32
|
const cisStops = await this.gtfsStopCisModel.getAll();
|
|
33
|
-
const gtfsStops = await this.gtfsStopRepository.
|
|
33
|
+
const gtfsStops = await this.gtfsStopRepository.getStopsForCache();
|
|
34
34
|
await this.gtfsStopsRedisRepository.refreshData(cisStops, gtfsStops);
|
|
35
35
|
}
|
|
36
36
|
};
|
package/dist/integration-engine/ropid-gtfs/workers/timetables/tasks/RefreshGtfsStopsCacheTask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefreshGtfsStopsCacheTask.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/ropid-gtfs/workers/timetables/tasks/RefreshGtfsStopsCacheTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAA6E;AAC7E,kFAAqF;AACrF,8EAA0E;AAC1E,iEAAwE;AACxE,4CAAqD;AACrD,2FAAwF;AAGjF,IAAM,yBAAyB,uCAA/B,MAAM,yBAA0B,SAAQ,sCAAiB;IAM5D,YAC8D,wBAA0D,EAC5D,gBAAgD;QAExG,KAAK,CAAC,iCAAqB,CAAC,CAAC;QAHqC,6BAAwB,GAAxB,wBAAwB,CAA0B;QACpD,qBAAgB,GAAhB,gBAAgB,CAAwB;QAP5F,cAAS,GAAG,uBAAuB,CAAC;QACpC,aAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;QAUpD,IAAI,CAAC,kBAAkB,GAAG,IAAI,gCAAmB,EAAE,CAAC;IACxD,CAAC;IAES,KAAK,CAAC,OAAO;QACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"RefreshGtfsStopsCacheTask.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/ropid-gtfs/workers/timetables/tasks/RefreshGtfsStopsCacheTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAA6E;AAC7E,kFAAqF;AACrF,8EAA0E;AAC1E,iEAAwE;AACxE,4CAAqD;AACrD,2FAAwF;AAGjF,IAAM,yBAAyB,uCAA/B,MAAM,yBAA0B,SAAQ,sCAAiB;IAM5D,YAC8D,wBAA0D,EAC5D,gBAAgD;QAExG,KAAK,CAAC,iCAAqB,CAAC,CAAC;QAHqC,6BAAwB,GAAxB,wBAAwB,CAA0B;QACpD,qBAAgB,GAAhB,gBAAgB,CAAwB;QAP5F,cAAS,GAAG,uBAAuB,CAAC;QACpC,aAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;QAUpD,IAAI,CAAC,kBAAkB,GAAG,IAAI,gCAAmB,EAAE,CAAC;IACxD,CAAC;IAES,KAAK,CAAC,OAAO;QACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,CAAC;QAEnE,MAAM,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACzE,CAAC;CACJ,CAAA;oCArBY,yBAAyB;IADrC,IAAA,qBAAU,GAAE;IAQJ,WAAA,IAAA,iBAAM,EAAC,iDAAuB,CAAC,wBAAwB,CAAC,CAAA;IACxD,WAAA,IAAA,iBAAM,EAAC,iDAAuB,CAAC,sBAAsB,CAAC,CAAA;qCADqC,mDAAwB;QAClC,mCAAsB;GARnG,yBAAyB,CAqBrC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { GtfsStopParser } from "../../../../../../../helpers/GtfsStopParser";
|
|
2
2
|
import { IStopCisDto } from "../../../../../../../schema-definitions/ropid-gtfs/interfaces/IStopCisDto";
|
|
3
|
-
import {
|
|
3
|
+
import { IStopCacheDto } from "../../../../../../../schema-definitions/ropid-gtfs/interfaces/IStopDto";
|
|
4
4
|
import { RedisModel } from "@golemio/core/dist/integration-engine";
|
|
5
5
|
export declare class GtfsStopsRedisRepository extends RedisModel {
|
|
6
6
|
private gtfsStopParser;
|
|
7
7
|
static NAMESPACE_PREFIX: string;
|
|
8
8
|
constructor(gtfsStopParser: GtfsStopParser);
|
|
9
|
-
refreshData(cisStops: Array<Pick<IStopCisDto, "id" | "cis">>, gtfsStops:
|
|
9
|
+
refreshData(cisStops: Array<Pick<IStopCisDto, "id" | "cis">>, gtfsStops: IStopCacheDto[]): Promise<void>;
|
|
10
10
|
private createNewCache;
|
|
11
11
|
private deleteOldCache;
|
|
12
12
|
}
|
|
@@ -47,7 +47,9 @@ let GtfsStopsRedisRepository = exports.GtfsStopsRedisRepository = GtfsStopsRedis
|
|
|
47
47
|
cisToAswNode.set(stop.cis, this.gtfsStopParser.getAswNodeFromId(stop.id));
|
|
48
48
|
}
|
|
49
49
|
const aswNodeToGtfsStops = new Map();
|
|
50
|
+
const staticData = new Map();
|
|
50
51
|
for (const stop of gtfsStops) {
|
|
52
|
+
staticData.set(stop.computed_cis_stop_id, JSON.stringify(stop));
|
|
51
53
|
const nodeStopIds = aswNodeToGtfsStops.get(stop.asw_node_id) ?? [];
|
|
52
54
|
if (nodeStopIds.length === 0) {
|
|
53
55
|
aswNodeToGtfsStops.set(stop.asw_node_id, nodeStopIds);
|
|
@@ -56,6 +58,7 @@ let GtfsStopsRedisRepository = exports.GtfsStopsRedisRepository = GtfsStopsRedis
|
|
|
56
58
|
}
|
|
57
59
|
const setName = (0, node_crypto_1.randomBytes)(4).toString("hex");
|
|
58
60
|
const pipeline = this.connection.pipeline();
|
|
61
|
+
pipeline.hset(`${this.prefix}:${setName}:staticData`, staticData);
|
|
59
62
|
pipeline.hset(`${this.prefix}:${setName}:aswNodeToGtfsStops`, aswNodeToGtfsStops);
|
|
60
63
|
pipeline.hset(`${this.prefix}:${setName}:cisToAswNode`, cisToAswNode);
|
|
61
64
|
pipeline.publish(`${this.prefix}`, `${this.prefix}:${setName}`);
|
|
@@ -71,6 +74,7 @@ let GtfsStopsRedisRepository = exports.GtfsStopsRedisRepository = GtfsStopsRedis
|
|
|
71
74
|
const pipeline = this.connection.pipeline();
|
|
72
75
|
pipeline.expire(`${setName}:aswNodeToGtfsStops`, TTL_SECONDS_BEFORE_DELETE);
|
|
73
76
|
pipeline.expire(`${setName}:cisToAswNode`, TTL_SECONDS_BEFORE_DELETE);
|
|
77
|
+
pipeline.expire(`${setName}:staticData`, TTL_SECONDS_BEFORE_DELETE);
|
|
74
78
|
await pipeline.exec();
|
|
75
79
|
}
|
|
76
80
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GtfsStopsRedisRepository.js","sourceRoot":"","sources":["../../../../../../../../src/integration-engine/ropid-gtfs/workers/timetables/tasks/data-access/cache/GtfsStopsRedisRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gFAAyD;AACzD,wFAAqF;AAGrF,0FAA0E;AAC1E,8EAAmE;AACnE,6EAAwE;AACxE,iEAAwE;AACxE,6CAA0C;AAE1C,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAG9B,IAAM,wBAAwB,mEAA9B,MAAM,wBAAyB,SAAQ,+BAAU;IAGpD,YAAoE,cAA8B;QAC9F,KAAK,CAAC,0BAA0B,EAAE;YAC9B,wBAAwB,EAAE,KAAK;YAC/B,MAAM,EAAE,0BAAwB,CAAC,gBAAgB;SACpD,CAAC,CAAC;QAJ6D,mBAAc,GAAd,cAAc,CAAgB;IAKlG,CAAC;IAEM,KAAK,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"GtfsStopsRedisRepository.js","sourceRoot":"","sources":["../../../../../../../../src/integration-engine/ropid-gtfs/workers/timetables/tasks/data-access/cache/GtfsStopsRedisRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,16 @@ import { StopFacade } from "../../service/facade/StopFacade";
|
|
|
4
4
|
import { TransferFacade } from "../../service/facade/TransferFacade";
|
|
5
5
|
import { RequestHandler } from "@golemio/core/dist/shared/express";
|
|
6
6
|
import { TransferDepartureCacheTransformation } from "../../service/transformations/TransferDepartureCacheTransformation";
|
|
7
|
+
import { GtfsStopParser } from "../../../../helpers/GtfsStopParser";
|
|
7
8
|
export declare class V4TransferBoardsController {
|
|
8
9
|
private stopFacade;
|
|
9
10
|
private infotextFacade;
|
|
10
11
|
private transferFacade;
|
|
11
12
|
private transformation;
|
|
13
|
+
private gtfsStopParser;
|
|
14
|
+
private static readonly NO_TRANSFERS;
|
|
12
15
|
private readonly defaultTransferBoardsLimit;
|
|
13
|
-
constructor(stopFacade: StopFacade, infotextFacade: InfotextFacade, transferFacade: TransferFacade, transformation: TransferDepartureCacheTransformation);
|
|
16
|
+
constructor(stopFacade: StopFacade, infotextFacade: InfotextFacade, transferFacade: TransferFacade, transformation: TransferDepartureCacheTransformation, gtfsStopParser: GtfsStopParser);
|
|
14
17
|
getTransferBoardData: RequestHandler;
|
|
15
18
|
private parseTransferBoardsParams;
|
|
16
19
|
private getTimeFrom;
|
|
@@ -14,6 +14,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
15
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
16
|
};
|
|
17
|
+
var V4TransferBoardsController_1;
|
|
17
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
19
|
exports.V4TransferBoardsController = void 0;
|
|
19
20
|
const TransferBoardFilter_1 = require("../../helpers/TransferBoardFilter");
|
|
@@ -28,13 +29,15 @@ const moment_timezone_1 = __importDefault(require("@golemio/core/dist/shared/mom
|
|
|
28
29
|
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
29
30
|
const TransferDepartureCacheTransformation_1 = require("../../service/transformations/TransferDepartureCacheTransformation");
|
|
30
31
|
const DepartureCalculator_1 = require("../../../shared/DepartureCalculator");
|
|
32
|
+
const GtfsStopParser_1 = require("../../../../helpers/GtfsStopParser");
|
|
31
33
|
const DEFAULT_TRANSFER_BOARDS_LIMIT = 8;
|
|
32
|
-
let V4TransferBoardsController = exports.V4TransferBoardsController = class V4TransferBoardsController {
|
|
33
|
-
constructor(stopFacade, infotextFacade, transferFacade, transformation) {
|
|
34
|
+
let V4TransferBoardsController = exports.V4TransferBoardsController = V4TransferBoardsController_1 = class V4TransferBoardsController {
|
|
35
|
+
constructor(stopFacade, infotextFacade, transferFacade, transformation, gtfsStopParser) {
|
|
34
36
|
this.stopFacade = stopFacade;
|
|
35
37
|
this.infotextFacade = infotextFacade;
|
|
36
38
|
this.transferFacade = transferFacade;
|
|
37
39
|
this.transformation = transformation;
|
|
40
|
+
this.gtfsStopParser = gtfsStopParser;
|
|
38
41
|
this.defaultTransferBoardsLimit = DEFAULT_TRANSFER_BOARDS_LIMIT;
|
|
39
42
|
this.getTransferBoardData = async (req, res, next) => {
|
|
40
43
|
const span = (0, trace_provider_1.createChildSpan)("V4TransferBoardsController.getTransferBoardData");
|
|
@@ -48,25 +51,29 @@ let V4TransferBoardsController = exports.V4TransferBoardsController = class V4Tr
|
|
|
48
51
|
}
|
|
49
52
|
//#region GTFS stops
|
|
50
53
|
let stopIds = [];
|
|
51
|
-
let transferCacheDto =
|
|
54
|
+
let transferCacheDto = null;
|
|
52
55
|
let infotextsToInclude = [];
|
|
56
|
+
let stopsInfo = [];
|
|
57
|
+
let transferStop = undefined;
|
|
53
58
|
try {
|
|
54
59
|
if ("aswId" in params && typeof params.aswId === "string") {
|
|
55
60
|
stopIds = await this.stopFacade.getStopIdsForTransferBoardsByAswId(params.aswId);
|
|
56
61
|
//#region Transfer departures and infotexts
|
|
57
62
|
if (stopIds.length === 0) {
|
|
58
|
-
return res.status(404).json(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
return res.status(404).json(V4TransferBoardsController_1.NO_TRANSFERS);
|
|
64
|
+
}
|
|
65
|
+
stopsInfo = await this.stopFacade.getDetailDataFromCacheByStopId(stopIds);
|
|
66
|
+
const normalizedStopId = this.gtfsStopParser.normalizedStopId(params.aswId);
|
|
67
|
+
transferStop = stopsInfo.find((stop) => this.gtfsStopParser.normalizedStopId(stop.stop_id) === normalizedStopId);
|
|
68
|
+
if (!transferStop) {
|
|
69
|
+
return res.status(404).json(V4TransferBoardsController_1.NO_TRANSFERS);
|
|
62
70
|
}
|
|
63
71
|
try {
|
|
64
|
-
const
|
|
65
|
-
this.transferFacade.getTransferCache(stopIds, params.limit, parseInt(params.vehicleRegistrationNumber ?? "0", 10), params.routeType, timeFrom || now),
|
|
66
|
-
this.infotextFacade.getInfotextsCache(stopIds, now, timeFrom),
|
|
67
|
-
]);
|
|
68
|
-
infotextsToInclude = infotexts;
|
|
72
|
+
const transferCache = await this.transferFacade.getTransferCache(transferStop.stop_id, stopIds, params.limit, parseInt(params.vehicleRegistrationNumber ?? "0", 10), params.routeType, timeFrom || now);
|
|
69
73
|
transferCacheDto = transferCache;
|
|
74
|
+
timeFrom = transferCache.delayedTimeFrom;
|
|
75
|
+
const infotexts = await this.infotextFacade.getInfotextsCache(stopIds, now, timeFrom);
|
|
76
|
+
infotextsToInclude = infotexts;
|
|
70
77
|
}
|
|
71
78
|
catch (error) {
|
|
72
79
|
span?.recordException(error);
|
|
@@ -90,20 +97,27 @@ let V4TransferBoardsController = exports.V4TransferBoardsController = class V4Tr
|
|
|
90
97
|
throw error;
|
|
91
98
|
}
|
|
92
99
|
//#endregion
|
|
100
|
+
if (!transferCacheDto.transfers?.length || !transferStop) {
|
|
101
|
+
return res.status(404).json(V4TransferBoardsController_1.NO_TRANSFERS);
|
|
102
|
+
}
|
|
103
|
+
const transferStopName = transferStop.stop_name;
|
|
104
|
+
// filter out stops with different stop_name
|
|
105
|
+
const sameNameStopIds = Array.from(new Set(stopsInfo.filter((stop) => stop.stop_name === transferStopName).map((stop) => stop.stop_id)).values());
|
|
93
106
|
// add predictedDeparture to transfers
|
|
94
107
|
transferCacheDto.transfers = transferCacheDto.transfers.map((t) => {
|
|
95
108
|
t.departure.predictedDepartureDate = DepartureCalculator_1.DepartureCalculator.getPredictedDepartureTime(new Date(t.departure.departure_datetime), t.departure.arrival_datetime ? new Date(t.departure.arrival_datetime) : null, t.position?.delay ?? null);
|
|
96
109
|
t.departure.predictedDepartureTimestamp = t.departure.predictedDepartureDate.getTime();
|
|
97
110
|
return t;
|
|
98
111
|
});
|
|
112
|
+
transferCacheDto.transfers = TransferBoardFilter_1.TransferBoardFilter.minimalTransferTime(transferCacheDto.transfers, transferCacheDto.delayedTimeFrom);
|
|
113
|
+
transferCacheDto.transfers = TransferBoardFilter_1.TransferBoardFilter.sameStopNameTransfer(transferCacheDto.transfers, transferStop, sameNameStopIds);
|
|
99
114
|
TransferBoardSorter_1.TransferBoardSorter.sortDepartures(transferCacheDto.transfers);
|
|
100
115
|
const transformedData = this.transformation.transformArray(transferCacheDto.transfers);
|
|
101
|
-
const filteredData = TransferBoardFilter_1.TransferBoardFilter.filterDepartures(transformedData, params.limit,
|
|
116
|
+
const filteredData = TransferBoardFilter_1.TransferBoardFilter.filterDepartures(transformedData, params.limit, transferCacheDto.delayedTimeFrom);
|
|
102
117
|
const output = {
|
|
103
118
|
// possibly share arrival_datetime of the current vehicle?
|
|
104
|
-
platform_code:
|
|
105
|
-
|
|
106
|
-
stop_name: transferCacheDto.currentTrip.stopTime?.stop_name,
|
|
119
|
+
platform_code: transferStop.platform_code,
|
|
120
|
+
stop_name: transferStop.stop_name,
|
|
107
121
|
departures: filteredData,
|
|
108
122
|
infotexts: infotextsToInclude,
|
|
109
123
|
icons: [],
|
|
@@ -141,15 +155,18 @@ let V4TransferBoardsController = exports.V4TransferBoardsController = class V4Tr
|
|
|
141
155
|
return arrivalDate.getTime();
|
|
142
156
|
}
|
|
143
157
|
};
|
|
144
|
-
|
|
158
|
+
V4TransferBoardsController.NO_TRANSFERS = { departures: [], infotexts: [] };
|
|
159
|
+
exports.V4TransferBoardsController = V4TransferBoardsController = V4TransferBoardsController_1 = __decorate([
|
|
145
160
|
(0, tsyringe_1.injectable)(),
|
|
146
161
|
__param(0, (0, tsyringe_1.inject)(OgPidToken_1.OgPidToken.StopFacade)),
|
|
147
162
|
__param(1, (0, tsyringe_1.inject)(OgPidToken_1.OgPidToken.InfotextFacade)),
|
|
148
163
|
__param(2, (0, tsyringe_1.inject)(OgPidToken_1.OgPidToken.TransferFacade)),
|
|
149
164
|
__param(3, (0, tsyringe_1.inject)(OgPidToken_1.OgPidToken.TransferDepartureCacheTransformation)),
|
|
165
|
+
__param(4, (0, tsyringe_1.inject)(OgPidToken_1.OgPidToken.GtfsStopParser)),
|
|
150
166
|
__metadata("design:paramtypes", [StopFacade_1.StopFacade,
|
|
151
167
|
InfotextFacade_1.InfotextFacade,
|
|
152
168
|
TransferFacade_1.TransferFacade,
|
|
153
|
-
TransferDepartureCacheTransformation_1.TransferDepartureCacheTransformation
|
|
169
|
+
TransferDepartureCacheTransformation_1.TransferDepartureCacheTransformation,
|
|
170
|
+
GtfsStopParser_1.GtfsStopParser])
|
|
154
171
|
], V4TransferBoardsController);
|
|
155
172
|
//# sourceMappingURL=V4TransferBoardsController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"V4TransferBoardsController.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/controllers/v4/V4TransferBoardsController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"V4TransferBoardsController.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/controllers/v4/V4TransferBoardsController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IStopCacheDto } from "../../../schema-definitions/ropid-gtfs/interfaces/IStopDto";
|
|
2
|
+
import { IDepartureWithPosition, IV4TransferDepartureOutputDto } from "../index";
|
|
2
3
|
export declare class TransferBoardFilter {
|
|
3
|
-
static filterDepartures(transfers: IV4TransferDepartureOutputDto[], limit: number, timeFrom:
|
|
4
|
+
static filterDepartures(transfers: IV4TransferDepartureOutputDto[], limit: number, timeFrom: Date): IV4TransferDepartureOutputDto[];
|
|
5
|
+
static minimalTransferTime(transfers: IDepartureWithPosition[], delayedTimeFrom: Date): IDepartureWithPosition[];
|
|
6
|
+
static sameStopNameTransfer(transfers: IDepartureWithPosition[], currentStop: IStopCacheDto, allowedStopIds: string[]): IDepartureWithPosition[];
|
|
4
7
|
private static isInRange;
|
|
5
8
|
}
|
|
@@ -1,14 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TransferBoardFilter = void 0;
|
|
4
|
+
const RouteTypeEnums_1 = require("../../../helpers/RouteTypeEnums");
|
|
5
|
+
const DEFAULT_TRANSFER_TIME_MS = 60 * 1000;
|
|
6
|
+
const TRANSFER_TIMES_MS = new Map([
|
|
7
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.BUS, 60000],
|
|
8
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.EXT_MISCELLANEOUS, 60000],
|
|
9
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.FERRY, 120000],
|
|
10
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.FUNICULAR, 120000],
|
|
11
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.METRO, 120000],
|
|
12
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.TRAIN, 120000],
|
|
13
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.TRAM, 60000],
|
|
14
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.TROLLEYBUS, 60000],
|
|
15
|
+
]);
|
|
16
|
+
const DIFFERENT_STOP_NAME_ALLOWED = new Map([
|
|
17
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.BUS, false],
|
|
18
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.EXT_MISCELLANEOUS, true],
|
|
19
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.FERRY, true],
|
|
20
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.FUNICULAR, true],
|
|
21
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.METRO, true],
|
|
22
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.TRAIN, true],
|
|
23
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.TRAM, false],
|
|
24
|
+
[RouteTypeEnums_1.GTFSRouteTypeEnum.TROLLEYBUS, false],
|
|
25
|
+
]);
|
|
4
26
|
class TransferBoardFilter {
|
|
5
27
|
static filterDepartures(transfers, limit, timeFrom) {
|
|
6
28
|
const filteredDepartures = [];
|
|
29
|
+
const timeFromMs = timeFrom.getTime();
|
|
7
30
|
for (const transfer of transfers) {
|
|
8
31
|
if (filteredDepartures.length === limit) {
|
|
9
32
|
break;
|
|
10
33
|
}
|
|
11
|
-
if (!this.isInRange(transfer,
|
|
34
|
+
if (!this.isInRange(transfer, timeFromMs)) {
|
|
12
35
|
continue;
|
|
13
36
|
}
|
|
14
37
|
filteredDepartures.push(transfer);
|
|
@@ -16,6 +39,34 @@ class TransferBoardFilter {
|
|
|
16
39
|
// Departures are already sorted so that metro ones are first
|
|
17
40
|
return filteredDepartures;
|
|
18
41
|
}
|
|
42
|
+
static minimalTransferTime(transfers, delayedTimeFrom) {
|
|
43
|
+
const arrivalTime = delayedTimeFrom.getTime();
|
|
44
|
+
return transfers.filter((t) => {
|
|
45
|
+
const transferTimeMs = TRANSFER_TIMES_MS.get(t.departure.route_type) || DEFAULT_TRANSFER_TIME_MS;
|
|
46
|
+
if (t.departure.predictedDepartureTimestamp == null) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return arrivalTime + transferTimeMs < t.departure.predictedDepartureTimestamp;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
static sameStopNameTransfer(transfers, currentStop, allowedStopIds) {
|
|
53
|
+
return transfers.filter((t) => {
|
|
54
|
+
if (t.departure.stop_id === currentStop.stop_id) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
if (DIFFERENT_STOP_NAME_ALLOWED.get(t.departure.route_type)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
if (t.departure.trip_headsign === currentStop.stop_name) {
|
|
61
|
+
// buses going through Vysocanska capture a tram #31 going through
|
|
62
|
+
// same node, but with different stop-name = Nadrazi Vysocany
|
|
63
|
+
// but the tram just rides from Nadrazi Vysocany and ends at Vysocanska
|
|
64
|
+
// so it is not a transfer option really.
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return allowedStopIds.includes(t.departure.stop_id);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
19
70
|
static isInRange(departure, timeFrom) {
|
|
20
71
|
const timeRangeStart = timeFrom;
|
|
21
72
|
// add one hour
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransferBoardFilter.js","sourceRoot":"","sources":["../../../../src/output-gateway/pid/helpers/TransferBoardFilter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"TransferBoardFilter.js","sourceRoot":"","sources":["../../../../src/output-gateway/pid/helpers/TransferBoardFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -113,7 +113,8 @@ export interface ITransferOutputDto {
|
|
|
113
113
|
}
|
|
114
114
|
export interface IV4TransferDto {
|
|
115
115
|
transfers: IDepartureWithPosition[];
|
|
116
|
-
|
|
116
|
+
delayedTimeFrom: Date;
|
|
117
|
+
plannedTimeFrom: Date;
|
|
117
118
|
}
|
|
118
119
|
export interface IDepartureWithPosition {
|
|
119
120
|
departure: IPublicGtfsDepartureCacheDto & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/output-gateway/pid/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAQA,4CAA0B;AAC1B,2CAAyB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/output-gateway/pid/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAQA,4CAA0B;AAC1B,2CAAyB;AAkKzB,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,0CAAyB,CAAA;IACzB,sCAAqB,CAAA;IACrB,gCAAe,CAAA;AACnB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAED,IAAY,cAGX;AAHD,WAAY,cAAc;IACtB,+BAAa,CAAA;IACb,yCAAuB,CAAA;AAC3B,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAED,IAAY,eAQX;AARD,WAAY,eAAe;IACvB,gCAAa,CAAA;IACb,2CAAwB,CAAA;IACxB,0DAAuC,CAAA;IACvC,oDAAiC,CAAA;IACjC,mEAAgD,CAAA;IAChD,qEAAkD,CAAA;IAClD,8EAA2D,CAAA;AAC/D,CAAC,EARW,eAAe,+BAAf,eAAe,QAQ1B;AAED,IAAY,aAMX;AAND,WAAY,aAAa;IACrB,wCAAuB,CAAA;IACvB,oCAAmB,CAAA;IACnB,sCAAqB,CAAA;IACrB,mCAAkB,CAAA;IAClB,8BAA8B;AAClC,CAAC,EANW,aAAa,6BAAb,aAAa,QAMxB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CisStopGroupRepository } from "../../../ropid-gtfs/data-access/CisStopGroupRepository";
|
|
2
2
|
import { GtfsStopsRedisRepository } from "../../../ropid-gtfs/data-access/redis/GtfsStopsRedisRepository";
|
|
3
|
+
import { IStopCacheDto } from "../../../../schema-definitions/ropid-gtfs/interfaces/IStopDto";
|
|
3
4
|
export declare class StopFacade {
|
|
4
5
|
private cisStopGroupsRepository;
|
|
5
6
|
private gtfsStopsRedisRepository;
|
|
@@ -14,5 +15,7 @@ export declare class StopFacade {
|
|
|
14
15
|
* Retrieve ASW node ID for given ASW stop ID and then returns GTFS stop IDs for this ASW node
|
|
15
16
|
*/
|
|
16
17
|
getStopIdsForTransferBoardsByAswId(aswId: string): Promise<string[]>;
|
|
18
|
+
getDetailDataFromCacheByStopId(stopId: string[]): Promise<IStopCacheDto[]>;
|
|
19
|
+
getDetailDataFromCacheByAswId(aswIds: string[]): Promise<IStopCacheDto[]>;
|
|
17
20
|
private getStopIdsForTransferBoardsByAswNode;
|
|
18
21
|
}
|
|
@@ -80,6 +80,13 @@ let StopFacade = exports.StopFacade = class StopFacade {
|
|
|
80
80
|
async getStopIdsForTransferBoardsByAswId(aswId) {
|
|
81
81
|
return await this.getStopIdsForTransferBoardsByAswNode(this.gtfsStopParser.getAswNodeFromId(aswId));
|
|
82
82
|
}
|
|
83
|
+
async getDetailDataFromCacheByStopId(stopId) {
|
|
84
|
+
const aswIds = stopId.map((stopId) => this.gtfsStopParser.normalizedStopId(stopId));
|
|
85
|
+
return this.getDetailDataFromCacheByAswId(aswIds);
|
|
86
|
+
}
|
|
87
|
+
async getDetailDataFromCacheByAswId(aswIds) {
|
|
88
|
+
return await this.gtfsStopsRedisRepository.getGtfsStopsDetailsByAswId(aswIds);
|
|
89
|
+
}
|
|
83
90
|
async getStopIdsForTransferBoardsByAswNode(aswNodeId) {
|
|
84
91
|
try {
|
|
85
92
|
return await this.gtfsStopsRedisRepository.getGtfsStopIdsByAswNode(aswNodeId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StopFacade.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/service/facade/StopFacade.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uEAAyD;AACzD,qDAAoD;AACpD,uDAA+C;AAC/C,mGAA2F;AAC3F,6GAAqG;AACrG,iEAAwE;AACxE,6EAA8F;
|
|
1
|
+
{"version":3,"file":"StopFacade.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/service/facade/StopFacade.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { IDepartureWithPosition, ITransferOutputDto, IV4TransferDto } from "../..";
|
|
2
1
|
import { Moment } from "@golemio/core/dist/shared/moment-timezone";
|
|
3
|
-
import {
|
|
2
|
+
import { IDepartureWithPosition, ITransferOutputDto, IV4TransferDto } from "../..";
|
|
3
|
+
import { DeparturesRepository } from "../../data-access";
|
|
4
|
+
import { DelayComputationRepository } from "../../../public/data-access/redis/DelayComputationRepository";
|
|
4
5
|
import { PublicGtfsDepartureRepository } from "../../../public/data-access/redis/PublicGtfsDepartureRepository";
|
|
5
|
-
import {
|
|
6
|
+
import { PublicStopTimeRepository } from "../../../public/data-access/redis/PublicStopTimeRepository";
|
|
6
7
|
import { PublicVehiclePositionsRepository } from "../../../public/data-access/redis/PublicVehiclePositionsRepository";
|
|
8
|
+
import { IPublicGtfsDepartureCacheDto } from "../../../../schema-definitions/ropid-gtfs/redis/interfaces/IPublicGtfsDepartureCacheDto";
|
|
7
9
|
import { IPublicApiCacheDto } from "../../../../schema-definitions/vehicle-positions/redis/interfaces/IPublicApiCacheDto";
|
|
8
|
-
import {
|
|
9
|
-
import { DelayComputationRepository } from "../../../public/data-access/redis/DelayComputationRepository";
|
|
10
|
-
import { DeparturesRepository } from "../../data-access";
|
|
10
|
+
import { TransferDepartureTransformation } from "../transformations/TransferDepartureTransformation";
|
|
11
11
|
export declare class TransferFacade {
|
|
12
12
|
private publicDepartureRepository;
|
|
13
13
|
private departuresRepository;
|
|
@@ -15,11 +15,17 @@ export declare class TransferFacade {
|
|
|
15
15
|
private tripRepository;
|
|
16
16
|
private stopTimeRepository;
|
|
17
17
|
private delayComputationRepository;
|
|
18
|
+
private static readonly MINUTE_AS_MS;
|
|
19
|
+
private static readonly OPEN_MINUTES_IN_PAST;
|
|
20
|
+
private static readonly OPEN_MINUTES_IN_PAST_MS;
|
|
18
21
|
constructor(publicDepartureRepository: PublicGtfsDepartureRepository, departuresRepository: DeparturesRepository, departureTransformation: TransferDepartureTransformation, tripRepository: PublicVehiclePositionsRepository, stopTimeRepository: PublicStopTimeRepository, delayComputationRepository: DelayComputationRepository);
|
|
19
22
|
getTransferDepartures(stopIds: string[], tripNumber: string | null, currentMoment: Moment, minutesOffset: number, timeZone?: string): Promise<ITransferOutputDto[]>;
|
|
20
|
-
|
|
21
|
-
private
|
|
22
|
-
|
|
23
|
+
private static isDifferentLine;
|
|
24
|
+
private calculateTimeFrom;
|
|
25
|
+
getTransferCache(stopId: string, stopIds: string[], limit: number, reqNumber: number, vehicleType: number, timeFrom: Date): Promise<IV4TransferDto>;
|
|
26
|
+
private static findStopTimeByStopId;
|
|
27
|
+
private findVehicleArrival;
|
|
28
|
+
processMultiplePositionsForDeparturesAtOnce(departures: IPublicGtfsDepartureCacheDto[], positionsByTrip: Map<string, IPublicApiCacheDto[]>): Promise<IDepartureWithPosition[]>;
|
|
23
29
|
/**
|
|
24
30
|
* Fallback options as defined by ROPID
|
|
25
31
|
*/
|
|
@@ -14,26 +14,27 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
14
14
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
15
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
16
|
};
|
|
17
|
+
var TransferFacade_1;
|
|
17
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
19
|
exports.TransferFacade = void 0;
|
|
20
|
+
const monitoring_1 = require("@golemio/core/dist/monitoring");
|
|
21
|
+
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
22
|
+
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
23
|
+
const DateTimeUtils_1 = require("../../../../helpers/DateTimeUtils");
|
|
24
|
+
const RouteTypeEnums_1 = require("../../../../helpers/RouteTypeEnums");
|
|
19
25
|
const pid_1 = require("../..");
|
|
26
|
+
const data_access_1 = require("../../data-access");
|
|
20
27
|
const OgPidToken_1 = require("../../ioc/OgPidToken");
|
|
21
28
|
const IPIDDepartureQueryOptions_1 = __importDefault(require("../../models/helpers/interfaces/IPIDDepartureQueryOptions"));
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const TransferDepartureTransformation_1 = require("../transformations/TransferDepartureTransformation");
|
|
29
|
+
const PIDDepartureModel_1 = __importDefault(require("../../models/helpers/PIDDepartureModel"));
|
|
30
|
+
const DelayComputationRepository_1 = require("../../../public/data-access/redis/DelayComputationRepository");
|
|
25
31
|
const PublicGtfsDepartureRepository_1 = require("../../../public/data-access/redis/PublicGtfsDepartureRepository");
|
|
26
|
-
const PublicVehiclePositionsRepository_1 = require("../../../public/data-access/redis/PublicVehiclePositionsRepository");
|
|
27
32
|
const PublicStopTimeRepository_1 = require("../../../public/data-access/redis/PublicStopTimeRepository");
|
|
28
|
-
const
|
|
29
|
-
const monitoring_1 = require("@golemio/core/dist/monitoring");
|
|
30
|
-
const PIDDepartureModel_1 = __importDefault(require("../../models/helpers/PIDDepartureModel"));
|
|
33
|
+
const PublicVehiclePositionsRepository_1 = require("../../../public/data-access/redis/PublicVehiclePositionsRepository");
|
|
31
34
|
const shared_1 = require("../../../shared");
|
|
32
|
-
const data_access_1 = require("../../data-access");
|
|
33
35
|
const const_1 = require("../../../../const");
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
let TransferFacade = exports.TransferFacade = class TransferFacade {
|
|
36
|
+
const TransferDepartureTransformation_1 = require("../transformations/TransferDepartureTransformation");
|
|
37
|
+
let TransferFacade = exports.TransferFacade = TransferFacade_1 = class TransferFacade {
|
|
37
38
|
constructor(publicDepartureRepository, departuresRepository, departureTransformation, tripRepository, stopTimeRepository, delayComputationRepository) {
|
|
38
39
|
this.publicDepartureRepository = publicDepartureRepository;
|
|
39
40
|
this.departuresRepository = departuresRepository;
|
|
@@ -77,14 +78,60 @@ let TransferFacade = exports.TransferFacade = class TransferFacade {
|
|
|
77
78
|
}
|
|
78
79
|
return transferDepartures;
|
|
79
80
|
}
|
|
80
|
-
|
|
81
|
+
static isDifferentLine(departure, position) {
|
|
82
|
+
if (departure.trip_id === position.gtfs_trip_id) {
|
|
83
|
+
return false; // same trip = remove itself
|
|
84
|
+
}
|
|
85
|
+
if (departure.route_type !== position.route_type) {
|
|
86
|
+
return true; // different means of transport, definitely different line
|
|
87
|
+
}
|
|
88
|
+
// filter out same line
|
|
89
|
+
return departure.route_short_name !== position.gtfs_route_short_name;
|
|
90
|
+
}
|
|
91
|
+
calculateTimeFrom(currentArrival, currentPosition, delayedTimeFrom, plannedTimeFrom) {
|
|
92
|
+
const arrivalDate = new Date(currentArrival.arrival_datetime);
|
|
93
|
+
// arrival before expected time (negative number) is taken as 0 delay
|
|
94
|
+
// arrival after expected time (positive number) is taken as is
|
|
95
|
+
const delayOnArrivalMs = Math.max(currentPosition.delay ?? 0, 0) * 1000;
|
|
96
|
+
delayedTimeFrom.setTime(arrivalDate.getTime() + delayOnArrivalMs);
|
|
97
|
+
plannedTimeFrom.setTime(arrivalDate.getTime());
|
|
98
|
+
}
|
|
99
|
+
async getTransferCache(stopId, stopIds, limit, reqNumber, vehicleType, timeFrom) {
|
|
81
100
|
const span = (0, monitoring_1.createChildSpan)(`Departures.getTransferCache`);
|
|
82
101
|
span?.setAttributes({ stopIds, limit, reqNumber, vehicleType });
|
|
102
|
+
let delayedTimeFrom = new Date(timeFrom.getTime());
|
|
103
|
+
let plannedTimeFrom = new Date(timeFrom.getTime());
|
|
104
|
+
let currentArrival = null;
|
|
83
105
|
try {
|
|
106
|
+
// 1. find the vehicle
|
|
107
|
+
const currentPosition = await this.tripRepository.getDetailedVehiclePosition(`service-${vehicleType}-${reqNumber}`);
|
|
108
|
+
if (currentPosition) {
|
|
109
|
+
// vehicle is on the map
|
|
110
|
+
// 2. find its arrival to the stop-id
|
|
111
|
+
currentArrival = await this.findVehicleArrival(currentPosition, stopIds, stopId);
|
|
112
|
+
}
|
|
113
|
+
if (currentPosition && currentArrival) {
|
|
114
|
+
this.calculateTimeFrom(currentArrival, currentPosition, delayedTimeFrom, plannedTimeFrom);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Vehicle does not ride into such stop-ids, or vehicle does not have Position
|
|
118
|
+
return {
|
|
119
|
+
transfers: [],
|
|
120
|
+
delayedTimeFrom,
|
|
121
|
+
plannedTimeFrom,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// timeFrom in query can be too early, minimum is the real arrival of the vehicle
|
|
125
|
+
if (timeFrom.getTime() > delayedTimeFrom.getTime()) {
|
|
126
|
+
delayedTimeFrom = new Date(timeFrom);
|
|
127
|
+
plannedTimeFrom = new Date(timeFrom);
|
|
128
|
+
}
|
|
129
|
+
const delayMinutes = Math.abs(Math.floor((delayedTimeFrom.getTime() - plannedTimeFrom.getTime()) / TransferFacade_1.MINUTE_AS_MS));
|
|
84
130
|
let departureEntities = [];
|
|
85
131
|
try {
|
|
86
|
-
|
|
87
|
-
|
|
132
|
+
// 3. find departures from all stop_ids in Node
|
|
133
|
+
// look forward 1 hour (add delay + open minutes), see JIS Transferboards Design Document
|
|
134
|
+
departureEntities = await this.publicDepartureRepository.getPublicGtfsDepartureCache(stopIds, 60 + TransferFacade_1.OPEN_MINUTES_IN_PAST + delayMinutes, new Date(plannedTimeFrom.getTime() - TransferFacade_1.OPEN_MINUTES_IN_PAST_MS), Math.max(10, limit * 5) // should be (at least 10) 5x the limit from request
|
|
88
135
|
);
|
|
89
136
|
}
|
|
90
137
|
catch (error) {
|
|
@@ -94,40 +141,29 @@ let TransferFacade = exports.TransferFacade = class TransferFacade {
|
|
|
94
141
|
}
|
|
95
142
|
throw new golemio_errors_1.GeneralError("Failed to publicGtfsDepartureCache", this.constructor.name, error, 500);
|
|
96
143
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
let currentStopTime = null;
|
|
100
|
-
if (currentPosition) {
|
|
101
|
-
const departureIndex = departureEntities.findIndex((departure) => {
|
|
102
|
-
return departure.trip_id === currentPosition.gtfs_trip_id;
|
|
103
|
-
});
|
|
104
|
-
// Remove currentDeparture from departureEntities
|
|
105
|
-
if (departureIndex !== -1) {
|
|
106
|
-
currentDeparture = departureEntities.splice(departureIndex, 1)[0];
|
|
107
|
-
}
|
|
108
|
-
const stopTimes = (await this.stopTimeRepository.getPublicStopTimeCache(currentPosition.vehicle_id, currentPosition.gtfs_trip_id)) || [];
|
|
109
|
-
currentStopTime = stopTimes.find((stopTime) => stopIds.includes(stopTime.stop_id)) ?? null;
|
|
110
|
-
}
|
|
111
|
-
if (currentPosition && !currentDeparture) {
|
|
112
|
-
// Important Fallback for last-stop of a trip
|
|
113
|
-
// because there is no Departure from such last-stop
|
|
114
|
-
currentDeparture = await this.findFallbackDeparture(currentPosition, stopIds);
|
|
115
|
-
}
|
|
144
|
+
// Remove current line (and trip) from departureEntities
|
|
145
|
+
departureEntities = departureEntities.filter((departure) => TransferFacade_1.isDifferentLine(departure, currentPosition));
|
|
116
146
|
// to be able to load future trips of Before_Track positioned vehicle
|
|
117
147
|
const omitFutureTrips = false;
|
|
118
|
-
|
|
119
|
-
|
|
148
|
+
const seenTripIds = new Map();
|
|
149
|
+
// One trip might go through more Stops in one Node (Nadrazi Vysocany)
|
|
150
|
+
// filter out departures of already seen trip
|
|
151
|
+
departureEntities = departureEntities.filter((departure) => {
|
|
152
|
+
if (seenTripIds.has(departure.trip_id)) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
seenTripIds.set(departure.trip_id, true);
|
|
156
|
+
return true;
|
|
157
|
+
});
|
|
158
|
+
const uniqueDeparturesTripIds = Array.from(seenTripIds.keys());
|
|
120
159
|
const positionsByTrip = await this.tripRepository.getAllVehiclePositionsForMultipleTrips(uniqueDeparturesTripIds, omitFutureTrips);
|
|
121
160
|
let transfers = [];
|
|
122
|
-
const moreDepartures = await this.processMultiplePositionsForDeparturesAtOnce(departureEntities, positionsByTrip
|
|
161
|
+
const moreDepartures = await this.processMultiplePositionsForDeparturesAtOnce(departureEntities, positionsByTrip);
|
|
123
162
|
transfers.push(...moreDepartures);
|
|
124
163
|
return {
|
|
125
|
-
currentTrip: {
|
|
126
|
-
departure: currentDeparture,
|
|
127
|
-
position: currentPosition,
|
|
128
|
-
stopTime: currentStopTime,
|
|
129
|
-
},
|
|
130
164
|
transfers,
|
|
165
|
+
delayedTimeFrom,
|
|
166
|
+
plannedTimeFrom,
|
|
131
167
|
};
|
|
132
168
|
}
|
|
133
169
|
catch (error) {
|
|
@@ -141,16 +177,24 @@ let TransferFacade = exports.TransferFacade = class TransferFacade {
|
|
|
141
177
|
span?.end();
|
|
142
178
|
}
|
|
143
179
|
}
|
|
144
|
-
|
|
180
|
+
static findStopTimeByStopId(stopTimes, stopIds) {
|
|
181
|
+
return stopTimes.find((stopTime) => stopIds.includes(stopTime.stop_id)) || null;
|
|
182
|
+
}
|
|
183
|
+
async findVehicleArrival(currentPosition, stopIds, stopId) {
|
|
145
184
|
const stopTimes = (await this.delayComputationRepository.getDelayComputationCacheProperty(currentPosition.gtfs_trip_id, "stop_times"));
|
|
146
185
|
if (!stopTimes?.stop_times?.length) {
|
|
147
186
|
return null;
|
|
148
187
|
}
|
|
149
|
-
|
|
188
|
+
// It is possible (based on incoming stop_ids), we won't find departure
|
|
189
|
+
// for this vehicle directly on this stopId...
|
|
190
|
+
let departureAtStopId = TransferFacade_1.findStopTimeByStopId(stopTimes.stop_times, [stopId]);
|
|
191
|
+
// But it can be in the whole Node = iterate through all stop_ids then.
|
|
192
|
+
departureAtStopId ??= TransferFacade_1.findStopTimeByStopId(stopTimes.stop_times, stopIds);
|
|
150
193
|
if (departureAtStopId) {
|
|
151
194
|
const arrivalDate = DateTimeUtils_1.DateTimeUtils.getStopDateTimeForTripOrigin(departureAtStopId.arrival_time_seconds, currentPosition.detailed_info.origin_timestamp);
|
|
152
195
|
const departureDate = DateTimeUtils_1.DateTimeUtils.getStopDateTimeForTripOrigin(departureAtStopId.departure_time_seconds, currentPosition.detailed_info.origin_timestamp);
|
|
153
196
|
return {
|
|
197
|
+
stop_name: departureAtStopId.stop.stop_name,
|
|
154
198
|
stop_id: departureAtStopId.stop_id,
|
|
155
199
|
departure_datetime: departureDate.toISOString(),
|
|
156
200
|
arrival_datetime: arrivalDate.toISOString(),
|
|
@@ -164,7 +208,7 @@ let TransferFacade = exports.TransferFacade = class TransferFacade {
|
|
|
164
208
|
}
|
|
165
209
|
return null;
|
|
166
210
|
}
|
|
167
|
-
async processMultiplePositionsForDeparturesAtOnce(departures, positionsByTrip
|
|
211
|
+
async processMultiplePositionsForDeparturesAtOnce(departures, positionsByTrip) {
|
|
168
212
|
const outputGroup = [];
|
|
169
213
|
const trainIdTripIdTuples = [];
|
|
170
214
|
const trainDepartures = new Map();
|
|
@@ -200,7 +244,7 @@ let TransferFacade = exports.TransferFacade = class TransferFacade {
|
|
|
200
244
|
for (const [tripId, stopTimeCache] of Array.from(stopTimeCachesByTripId.entries())) {
|
|
201
245
|
const departure = trainDepartures.get(tripId);
|
|
202
246
|
const position = positionsByTrip.get(tripId)[0];
|
|
203
|
-
const stopTime = stopTimeCache.find((stopTime) =>
|
|
247
|
+
const stopTime = stopTimeCache.find((stopTime) => departure.stop_id === stopTime.stop_id);
|
|
204
248
|
outputGroup.push({
|
|
205
249
|
departure,
|
|
206
250
|
position: position || null,
|
|
@@ -227,7 +271,10 @@ let TransferFacade = exports.TransferFacade = class TransferFacade {
|
|
|
227
271
|
};
|
|
228
272
|
}
|
|
229
273
|
};
|
|
230
|
-
|
|
274
|
+
TransferFacade.MINUTE_AS_MS = 60 * 1000;
|
|
275
|
+
TransferFacade.OPEN_MINUTES_IN_PAST = 15;
|
|
276
|
+
TransferFacade.OPEN_MINUTES_IN_PAST_MS = TransferFacade_1.OPEN_MINUTES_IN_PAST * TransferFacade_1.MINUTE_AS_MS;
|
|
277
|
+
exports.TransferFacade = TransferFacade = TransferFacade_1 = __decorate([
|
|
231
278
|
(0, tsyringe_1.injectable)(),
|
|
232
279
|
__param(0, (0, tsyringe_1.inject)(OgPidToken_1.OgPidToken.PublicGtfsDepartureRepository)),
|
|
233
280
|
__param(1, (0, tsyringe_1.inject)(OgPidToken_1.OgPidToken.DeparturesRepository)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransferFacade.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/service/facade/TransferFacade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TransferFacade.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/service/facade/TransferFacade.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,8DAAgE;AAChE,6EAA8F;AAE9F,iEAAwE;AAExE,qEAAuD;AACvD,uEAA4D;AAC5D,+BASiB;AACjB,mDAA2D;AAC3D,qDAAoD;AACpD,0HAAoG;AACpG,+FAA0E;AAC1E,6GAAqG;AACrG,mHAA2G;AAC3G,yGAAiG;AACjG,yHAAiH;AACjH,4CAA8C;AAM9C,6CAA8C;AAC9C,wGAAqG;AAK9F,IAAM,cAAc,+CAApB,MAAM,cAAc;IAKvB,YAC8D,yBAAwD,EACjE,oBAA0C,EAC/B,uBAAwD,EACvD,cAAgD,EACxD,kBAA4C,EAC1C,0BAAsD;QALnD,8BAAyB,GAAzB,yBAAyB,CAA+B;QACjE,yBAAoB,GAApB,oBAAoB,CAAsB;QAC/B,4BAAuB,GAAvB,uBAAuB,CAAiC;QACvD,mBAAc,GAAd,cAAc,CAAkC;QACxD,uBAAkB,GAAlB,kBAAkB,CAA0B;QAC1C,+BAA0B,GAA1B,0BAA0B,CAA4B;IAC9G,CAAC;IAEG,KAAK,CAAC,qBAAqB,CAC9B,OAAiB,EACjB,UAAyB,EACzB,aAAqB,EACrB,aAAqB,EACrB,QAAQ,GAAG,yBAAgB,CAAC,QAAQ;QAEpC,IAAI,iBAAiB,GAAyB,EAAE,CAAC;QACjD,IAAI;YACA,iBAAiB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC;gBACtE,QAAQ,EAAE,OAAO;gBACjB,aAAa;gBACb,aAAa;aAChB,CAAC,CAAC;SACN;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,KAAK,YAAY,qCAAoB,EAAE;gBACvC,MAAM,KAAK,CAAC;aACf;YAED,MAAM,IAAI,6BAAY,CAAC,wCAAwC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;SACvG;QAED,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,OAAO,EAAE,CAAC;SACb;QAED,IAAI,kBAAkB,GAAyB,EAAE,CAAC;QAClD,IAAI;YACA,MAAM,mBAAmB,GAAG,IAAI,2BAAkB,CAAC,iBAAiB,EAAE;gBAClE,GAAG,IAAI,CAAC,cAAc;gBACtB,QAAQ,EAAE,QAAQ;gBAClB,UAAU;aACb,CAAC,CAAC,yBAAyB,EAAE,CAAC;YAE/B,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;SACzF;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,KAAK,YAAY,qCAAoB,EAAE;gBACvC,MAAM,KAAK,CAAC;aACf;YACD,MAAM,IAAI,6BAAY,CAAC,uCAAuC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;SACtG;QAED,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,SAAuC,EAAE,QAA4B;QAChG,IAAI,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC,YAAY,EAAE;YAC7C,OAAO,KAAK,CAAC,CAAC,4BAA4B;SAC7C;QACD,IAAI,SAAS,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,EAAE;YAC9C,OAAO,IAAI,CAAC,CAAC,0DAA0D;SAC1E;QACD,uBAAuB;QACvB,OAAO,SAAS,CAAC,gBAAgB,KAAK,QAAQ,CAAC,qBAAqB,CAAC;IACzE,CAAC;IAEO,iBAAiB,CACrB,cAAqD,EACrD,eAAmC,EACnC,eAAqB,EACrB,eAAqB;QAErB,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,gBAA0B,CAAC,CAAC;QACxE,qEAAqE;QACrE,+DAA+D;QAC/D,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;QACxE,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAC,CAAC;QAClE,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,gBAAgB,CACzB,MAAc,EACd,OAAiB,EACjB,KAAa,EACb,SAAiB,EACjB,WAAmB,EACnB,QAAc;QAEd,MAAM,IAAI,GAAG,IAAA,4BAAe,EAAC,6BAA6B,CAAC,CAAC;QAC5D,IAAI,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAgB,CAAC,CAAC;QAE9E,IAAI,eAAe,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,IAAI,eAAe,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QAEnD,IAAI,cAAc,GAAiD,IAAI,CAAC;QAExE,IAAI;YACA,sBAAsB;YACtB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,0BAA0B,CAAC,WAAW,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC;YAEpH,IAAI,eAAe,EAAE;gBACjB,wBAAwB;gBACxB,qCAAqC;gBACrC,cAAc,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;aACpF;YAED,IAAI,eAAe,IAAI,cAAc,EAAE;gBACnC,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;aAC7F;iBAAM;gBACH,8EAA8E;gBAC9E,OAAO;oBACH,SAAS,EAAE,EAAE;oBACb,eAAe;oBACf,eAAe;iBACA,CAAC;aACvB;YAED,iFAAiF;YACjF,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE;gBAChD,eAAe,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrC,eAAe,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;aACxC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CACzB,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC,GAAG,gBAAc,CAAC,YAAY,CAAC,CACpG,CAAC;YAEF,IAAI,iBAAiB,GAAmC,EAAE,CAAC;YAC3D,IAAI;gBACA,+CAA+C;gBAC/C,yFAAyF;gBACzF,iBAAiB,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,2BAA2B,CAChF,OAAO,EACP,EAAE,GAAG,gBAAc,CAAC,oBAAoB,GAAG,YAAY,EACvD,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,gBAAc,CAAC,uBAAuB,CAAC,EAC5E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,oDAAoD;iBAC/E,CAAC;aACL;YAAC,OAAO,KAAK,EAAE;gBACZ,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,KAAK,YAAY,qCAAoB,EAAE;oBACvC,MAAM,KAAK,CAAC;iBACf;gBACD,MAAM,IAAI,6BAAY,CAAC,oCAAoC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;aACnG;YAED,wDAAwD;YACxD,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CACvD,gBAAc,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC,CAC7D,CAAC;YAEF,qEAAqE;YACrE,MAAM,eAAe,GAAG,KAAK,CAAC;YAE9B,MAAM,WAAW,GAAyB,IAAI,GAAG,EAAE,CAAC;YAEpD,sEAAsE;YACtE,6CAA6C;YAC7C,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE;gBACvD,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;oBACpC,OAAO,KAAK,CAAC;iBAChB;gBACD,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACzC,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,MAAM,uBAAuB,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YAE/D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,sCAAsC,CACpF,uBAAuB,EACvB,eAAe,CAClB,CAAC;YAEF,IAAI,SAAS,GAA6B,EAAE,CAAC;YAE7C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,2CAA2C,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;YAElH,SAAS,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;YAElC,OAAO;gBACH,SAAS;gBACT,eAAe;gBACf,eAAe;aAClB,CAAC;SACL;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,KAAK,YAAY,qCAAoB,EAAE;gBACvC,MAAM,KAAK,CAAC;aACf;YACD,MAAM,IAAI,6BAAY,CAAC,2BAA2B,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;SAC1F;gBAAS;YACN,IAAI,EAAE,GAAG,EAAE,CAAC;SACf;IACL,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAC/B,SAAc,EACd,OAAiB;QAEjB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,QAAW,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC;IACvF,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC5B,eAAmC,EACnC,OAAiB,EACjB,MAAc;QAEd,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,0BAA0B,CAAC,gCAAgC,CACrF,eAAe,CAAC,YAAY,EAC5B,YAAY,CACf,CAAuC,CAAC;QAEzC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE;YAChC,OAAO,IAAI,CAAC;SACf;QAED,uEAAuE;QACvE,8CAA8C;QAC9C,IAAI,iBAAiB,GAAG,gBAAc,CAAC,oBAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAE5F,uEAAuE;QACvE,iBAAiB,KAAK,gBAAc,CAAC,oBAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEzF,IAAI,iBAAiB,EAAE;YACnB,MAAM,WAAW,GAAS,6BAAa,CAAC,4BAA4B,CAChE,iBAAiB,CAAC,oBAAoB,EACtC,eAAe,CAAC,aAAa,CAAC,gBAAgB,CACjD,CAAC;YACF,MAAM,aAAa,GAAS,6BAAa,CAAC,4BAA4B,CAClE,iBAAiB,CAAC,sBAAsB,EACxC,eAAe,CAAC,aAAa,CAAC,gBAAgB,CACjD,CAAC;YAEF,OAAO;gBACH,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS;gBAC3C,OAAO,EAAE,iBAAiB,CAAC,OAAO;gBAClC,kBAAkB,EAAE,aAAa,CAAC,WAAW,EAAE;gBAC/C,gBAAgB,EAAE,WAAW,CAAC,WAAW,EAAE;gBAC3C,gBAAgB,EAAE,eAAe,CAAC,qBAAqB;gBACvD,UAAU,EAAE,eAAe,CAAC,UAAU;gBACtC,OAAO,EAAE,eAAe,CAAC,YAAY;gBACrC,aAAa,EAAE,iBAAiB,CAAC,aAAa;gBAC9C,aAAa,EAAE,IAAI;gBACnB,aAAa,EAAE,eAAe,CAAC,aAAa,CAAC,aAAc;aACrB,CAAC;SAC9C;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,2CAA2C,CACpD,UAA0C,EAC1C,eAAkD;QAElD,MAAM,WAAW,GAA6B,EAAE,CAAC;QACjD,MAAM,mBAAmB,GAA4B,EAAE,CAAC;QACxD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAwC,CAAC;QAExE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAChC,0DAA0D;YAC1D,MAAM,SAAS,GAAyB,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACrF,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACnB,WAAW,CAAC,IAAI,CAAC;oBACb,SAAS;oBACT,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;iBACjB,CAAC,CAAC;gBACH,SAAS;aACZ;YAED,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,KAAK,yBAAiB,CAAC,QAAQ,CAAC,CAAC;YAEpG,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE;gBAC9B,IAAI,SAAS,CAAC,aAAa,IAAI,IAAI,IAAI,SAAS,CAAC,UAAU,KAAK,kCAAiB,CAAC,KAAK,EAAE;oBACrF,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;oBAClD,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC9D,SAAS;iBACZ;gBAED,gFAAgF;gBAChF,WAAW,CAAC,IAAI,CAAC;oBACb,SAAS;oBACT,QAAQ,EAAE,GAAG;oBACb,QAAQ,EAAE,IAAI;iBACjB,CAAC,CAAC;aACN;SACJ;QAED,MAAM,sBAAsB,GAA2C,CAAC,mBAAmB,CAAC,MAAM;YAC9F,CAAC,CAAC,IAAI,GAAG,EAAE;YACX,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,mBAAmB,CAAC,CAAC;QAErF,KAAK,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC,EAAE;YAChF,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC,CAAC;YAEjD,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC;YAE1F,WAAW,CAAC,IAAI,CAAC;gBACb,SAAS;gBACT,QAAQ,EAAE,QAAQ,IAAI,IAAI;gBAC1B,QAAQ,EAAE,QAAQ,IAAI,IAAI;aAC7B,CAAC,CAAC;SACN;QAED,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAY,cAAc;QACtB,OAAO;YACH,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,mBAAa,CAAC,UAAU;YAC9B,KAAK,EAAE,oBAAc,CAAC,IAAI;YAC1B,MAAM,EAAE,qBAAe,CAAC,6BAA6B;YACrD,IAAI,EAAE,CAAC,mBAAa,CAAC,QAAQ,CAAC;YAC9B,oBAAoB,EAAE,EAAE;YACxB,cAAc,EAAE,IAAI;YACpB,cAAc,EAAE,IAAI,EAAE,2BAA2B;SACpD,CAAC;IACN,CAAC;;AAtUuB,2BAAY,GAAG,EAAE,GAAG,IAAI,AAAZ,CAAa;AACzB,mCAAoB,GAAG,EAAE,AAAL,CAAM;AAC1B,sCAAuB,GAAG,gBAAc,CAAC,oBAAoB,GAAG,gBAAc,CAAC,YAAY,AAApE,CAAqE;yBAH3G,cAAc;IAD1B,IAAA,qBAAU,GAAE;IAOJ,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,6BAA6B,CAAC,CAAA;IAChD,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,oBAAoB,CAAC,CAAA;IACvC,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,+BAA+B,CAAC,CAAA;IAClD,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,gCAAgC,CAAC,CAAA;IACnD,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,wBAAwB,CAAC,CAAA;IAC3C,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,0BAA0B,CAAC,CAAA;qCALuC,6DAA6B;QAC3C,kCAAoB;QACN,iEAA+B;QACvC,mEAAgC;QACpC,mDAAwB;QACd,uDAA0B;GAXxG,cAAc,CAwU1B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RepositoryWithSubscriber } from "../../../shared/service/VPSubscriber";
|
|
2
|
+
import { IStopCacheDto } from "../../../../schema-definitions/ropid-gtfs/interfaces/IStopDto";
|
|
2
3
|
import { IoRedisConnector } from "@golemio/core/dist/helpers/data-access/redis/IoRedisConnector";
|
|
3
4
|
import { ILogger } from "@golemio/core/dist/helpers/logger/LoggerProvider";
|
|
4
5
|
export declare class GtfsStopsRedisRepository implements RepositoryWithSubscriber {
|
|
@@ -10,4 +11,5 @@ export declare class GtfsStopsRedisRepository implements RepositoryWithSubscribe
|
|
|
10
11
|
setCurrentSetName(name: string): void;
|
|
11
12
|
getAswNodeIdFromCisId(cisId: string): Promise<string | null>;
|
|
12
13
|
getGtfsStopIdsByAswNode(aswNodeId: string): Promise<string[]>;
|
|
14
|
+
getGtfsStopsDetailsByAswId(aswIds: string[]): Promise<IStopCacheDto[]>;
|
|
13
15
|
}
|
|
@@ -54,7 +54,7 @@ let GtfsStopsRedisRepository = exports.GtfsStopsRedisRepository = class GtfsStop
|
|
|
54
54
|
return await connection.hget(`${this.setName}:cisToAswNode`, cisId);
|
|
55
55
|
}
|
|
56
56
|
catch (error) {
|
|
57
|
-
throw new golemio_errors_1.GeneralError("Cannot
|
|
57
|
+
throw new golemio_errors_1.GeneralError("Cannot aswNodeId from cache", this.constructor.name, error);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
async getGtfsStopIdsByAswNode(aswNodeId) {
|
|
@@ -70,7 +70,29 @@ let GtfsStopsRedisRepository = exports.GtfsStopsRedisRepository = class GtfsStop
|
|
|
70
70
|
return listOfGtfsStops.split(",");
|
|
71
71
|
}
|
|
72
72
|
catch (error) {
|
|
73
|
-
throw new golemio_errors_1.GeneralError("Cannot
|
|
73
|
+
throw new golemio_errors_1.GeneralError("Cannot gtfsStopIds from cache", this.constructor.name, error);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async getGtfsStopsDetailsByAswId(aswIds) {
|
|
77
|
+
const connection = await this.checkSetNameAndConnection();
|
|
78
|
+
if (!connection) {
|
|
79
|
+
throw new golemio_errors_1.GeneralError("Unable to get connection", this.constructor.name);
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const stopsDetail = await connection.hmget(`${this.setName}:staticData`, ...aswIds);
|
|
83
|
+
if (!stopsDetail) {
|
|
84
|
+
throw new golemio_errors_1.GeneralError(`Unable to get stops details by aswId: ${aswIds}`, this.constructor.name);
|
|
85
|
+
}
|
|
86
|
+
const res = [];
|
|
87
|
+
for (const stopDetail of stopsDetail) {
|
|
88
|
+
if (stopDetail === null)
|
|
89
|
+
continue;
|
|
90
|
+
res.push(JSON.parse(stopDetail));
|
|
91
|
+
}
|
|
92
|
+
return res;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
throw new golemio_errors_1.GeneralError("Cannot get stops details from cache", this.constructor.name, error);
|
|
74
96
|
}
|
|
75
97
|
}
|
|
76
98
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GtfsStopsRedisRepository.js","sourceRoot":"","sources":["../../../../../src/output-gateway/ropid-gtfs/data-access/redis/GtfsStopsRedisRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"GtfsStopsRedisRepository.js","sourceRoot":"","sources":["../../../../../src/output-gateway/ropid-gtfs/data-access/redis/GtfsStopsRedisRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,4 +19,6 @@ export interface IStopDto {
|
|
|
19
19
|
export interface IStopComputedDto {
|
|
20
20
|
computed_cis_stop_id: string | null;
|
|
21
21
|
}
|
|
22
|
-
export type
|
|
22
|
+
export type IStopCacheDto = Pick<IStopDto, "stop_id" | "asw_node_id" | "platform_code" | "stop_name" | "wheelchair_boarding" | "zone_id"> & {
|
|
23
|
+
computed_cis_stop_id: string;
|
|
24
|
+
};
|