@golemio/pid 3.5.0 → 3.5.1-dev.1632490375
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/20250103092631-skip-missing.js +53 -0
- package/db/migrations/postgresql/sqls/20250103092631-skip-missing-down.sql +184 -0
- package/db/migrations/postgresql/sqls/20250103092631-skip-missing-up.sql +195 -0
- package/dist/integration-engine/ropid-gtfs/data-access/cache/RunTripsRedisRepository.js +2 -1
- package/dist/integration-engine/ropid-gtfs/data-access/cache/RunTripsRedisRepository.js.map +1 -1
- package/dist/integration-engine/vehicle-positions/workers/vehicle-positions/tasks/PropagateTrainDelayTask.js.map +1 -1
- package/dist/output-gateway/pid/controllers/v2/V2DepartureBoardsController.js +1 -3
- package/dist/output-gateway/pid/controllers/v2/V2DepartureBoardsController.js.map +1 -1
- package/dist/output-gateway/pid/controllers/v3/V3TransferBoardsController.d.ts +1 -0
- package/dist/output-gateway/pid/controllers/v3/V3TransferBoardsController.js +12 -3
- package/dist/output-gateway/pid/controllers/v3/V3TransferBoardsController.js.map +1 -1
- package/dist/output-gateway/pid/domain/DepartureInterfaces.d.ts +7 -0
- package/dist/output-gateway/pid/domain/DepartureInterfaces.js +3 -0
- package/dist/output-gateway/pid/domain/DepartureInterfaces.js.map +1 -0
- package/dist/output-gateway/pid/index.d.ts +4 -5
- package/dist/output-gateway/pid/index.js +1 -0
- package/dist/output-gateway/pid/index.js.map +1 -1
- package/dist/output-gateway/pid/ioc/Di.js +4 -0
- package/dist/output-gateway/pid/ioc/Di.js.map +1 -1
- package/dist/output-gateway/pid/ioc/OgPidToken.d.ts +2 -0
- package/dist/output-gateway/pid/ioc/OgPidToken.js +2 -0
- package/dist/output-gateway/pid/ioc/OgPidToken.js.map +1 -1
- package/dist/output-gateway/pid/models/PIDDepartureBoardsModel.d.ts +14 -28
- package/dist/output-gateway/pid/models/PIDDepartureBoardsModel.js +192 -71
- package/dist/output-gateway/pid/models/PIDDepartureBoardsModel.js.map +1 -1
- package/dist/output-gateway/pid/models/helpers/PIDDepartureModel.js +27 -15
- package/dist/output-gateway/pid/models/helpers/PIDDepartureModel.js.map +1 -1
- package/dist/output-gateway/pid/models/helpers/SkipHelper.d.ts +19 -0
- package/dist/output-gateway/pid/models/helpers/SkipHelper.js +116 -0
- package/dist/output-gateway/pid/models/helpers/SkipHelper.js.map +1 -0
- package/dist/output-gateway/pid/models/helpers/const.d.ts +4 -0
- package/dist/output-gateway/pid/models/helpers/const.js +8 -0
- package/dist/output-gateway/pid/models/helpers/const.js.map +1 -0
- package/dist/output-gateway/pid/models/helpers/interfaces/IPIDDepartureQueryOptions.d.ts +4 -1
- package/dist/output-gateway/pid/models/interfaces/IGetDeparturesOptions.d.ts +21 -0
- package/dist/output-gateway/pid/models/interfaces/IGetDeparturesOptions.js +3 -0
- package/dist/output-gateway/pid/models/interfaces/IGetDeparturesOptions.js.map +1 -0
- package/dist/output-gateway/pid/routers/v3/V3PIDRouter.js +1 -1
- package/dist/output-gateway/pid/routers/v3/V3PIDRouter.js.map +1 -1
- package/dist/output-gateway/pid/service/facade/TransferFacade.d.ts +1 -1
- package/dist/output-gateway/pid/service/facade/TransferFacade.js +2 -0
- package/dist/output-gateway/pid/service/facade/TransferFacade.js.map +1 -1
- package/dist/output-gateway/public/data-access/redis/PublicVehiclePositionsRepository.d.ts +4 -2
- package/dist/output-gateway/public/data-access/redis/PublicVehiclePositionsRepository.js +90 -68
- package/dist/output-gateway/public/data-access/redis/PublicVehiclePositionsRepository.js.map +1 -1
- package/dist/output-gateway/public/domain/repository/IVehiclePositionsRepository.d.ts +2 -1
- package/dist/output-gateway/ropid-gtfs/data-access/redis/RunTripsRedisRepository.d.ts +10 -0
- package/dist/output-gateway/ropid-gtfs/data-access/redis/RunTripsRedisRepository.js +65 -0
- package/dist/output-gateway/ropid-gtfs/data-access/redis/RunTripsRedisRepository.js.map +1 -0
- package/dist/output-gateway/ropid-gtfs/domain/repository/IRunTripsRedisRepository.d.ts +4 -0
- package/dist/output-gateway/ropid-gtfs/domain/repository/IRunTripsRedisRepository.js +3 -0
- package/dist/output-gateway/ropid-gtfs/domain/repository/IRunTripsRedisRepository.js.map +1 -0
- package/dist/output-gateway/shared/constants/validations.js +1 -1
- package/dist/output-gateway/shared/constants/validations.js.map +1 -1
- package/dist/schema-definitions/ropid-gtfs/redis/const.d.ts +1 -0
- package/dist/schema-definitions/ropid-gtfs/redis/const.js +2 -1
- package/dist/schema-definitions/ropid-gtfs/redis/const.js.map +1 -1
- package/docs/openapi-output.yaml +11 -3
- package/package.json +3 -3
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SkipHelper = void 0;
|
|
4
|
+
const RouteTypeEnums_1 = require("../../../../helpers/RouteTypeEnums");
|
|
5
|
+
const const_1 = require("./const");
|
|
6
|
+
/** Extracts the last numeric sequence from strings like:
|
|
7
|
+
* Os 1111 -> 1111
|
|
8
|
+
* Os 1111 B -> 1111
|
|
9
|
+
* Rx 1/1111 A -> 1111
|
|
10
|
+
*/
|
|
11
|
+
const TRIP_NUMBER_REGEX = /(\d+)(?!.*\d)/;
|
|
12
|
+
class SkipHelper {
|
|
13
|
+
/**
|
|
14
|
+
* Used exclusively in transfer boards to skip transfers for the current trip
|
|
15
|
+
* (i.e., transfers within the vehicle where the transfer board is located)
|
|
16
|
+
*/
|
|
17
|
+
static isMatchingTripNumber(departure, tripNumber) {
|
|
18
|
+
const tripShortName = departure.trip_short_name;
|
|
19
|
+
if (!tripShortName) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
const lastNumber = tripShortName.match(TRIP_NUMBER_REGEX)?.[1];
|
|
23
|
+
return !!lastNumber && lastNumber === tripNumber;
|
|
24
|
+
}
|
|
25
|
+
static hasNoDelayInfo(departure) {
|
|
26
|
+
return !departure.is_delay_available;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Used exclusively in departure boards when skip[]=missing is requested (without untracked)
|
|
30
|
+
*/
|
|
31
|
+
static isVehicleMissing(departure, runScheduleMap, untrackedTrips, nowDate = new Date()) {
|
|
32
|
+
// Not missing if essential trip data is missing or if delay information is available
|
|
33
|
+
if (!("trip.start_timestamp" in departure) ||
|
|
34
|
+
departure["trip.start_timestamp"] === null ||
|
|
35
|
+
departure.run_number === null ||
|
|
36
|
+
departure.origin_route_name === null ||
|
|
37
|
+
departure.is_delay_available) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const startTimestamp = new Date(departure["trip.start_timestamp"]);
|
|
41
|
+
const minutesToStart = (startTimestamp.getTime() - nowDate.getTime()) / 60000;
|
|
42
|
+
/// Not missing if departure is too far in the future (threshold varies for metro)
|
|
43
|
+
if (this.isOutsideStartThreshold(minutesToStart, departure.route_type)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
// Missing if the trip should have already started
|
|
47
|
+
else if (this.hasAlreadyDeparted(minutesToStart)) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
// Cannot determine missing status without run schedule information
|
|
51
|
+
const runId = `${departure.origin_route_name}_${departure.run_number}`;
|
|
52
|
+
const runSchedule = runScheduleMap?.get(runId);
|
|
53
|
+
if (!runSchedule) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
// Not missing if this is the first trip in the run or if trip isn't found
|
|
57
|
+
const runTripIndex = runSchedule.findIndex((trip) => trip.trip_id === departure.trip_id);
|
|
58
|
+
if (runTripIndex === -1 || runTripIndex === 0) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
// Not missing if there's a significant gap after the previous trip
|
|
62
|
+
const previousRunTripEnd = new Date(runSchedule[runTripIndex - 1].end_timestamp);
|
|
63
|
+
if (this.hasLargeTimegapBetweenTrips(previousRunTripEnd, startTimestamp)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
// Not missing if the previous trip has delay information available
|
|
67
|
+
const isPreviousUntracked = untrackedTrips?.has(runSchedule[runTripIndex - 1].trip_id);
|
|
68
|
+
if (!isPreviousUntracked) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const previousStartTimestamp = new Date(runSchedule[runTripIndex - 1].start_timestamp);
|
|
72
|
+
const previousMinutesToStart = (previousStartTimestamp.getTime() - nowDate.getTime()) / 60000;
|
|
73
|
+
// Missing if previous trip should have already started
|
|
74
|
+
if (this.hasAlreadyDeparted(previousMinutesToStart)) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
// Check position of previous trip in the run
|
|
78
|
+
const previousRunTripIndex = runTripIndex - 1;
|
|
79
|
+
if (previousRunTripIndex === -1 || previousRunTripIndex === 0) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
// Check for gaps before the previous trip
|
|
83
|
+
const previousPreviousRunTripEnd = new Date(runSchedule[previousRunTripIndex - 1].end_timestamp);
|
|
84
|
+
if (this.hasLargeTimegapBetweenTrips(previousPreviousRunTripEnd, previousStartTimestamp)) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
// If we reach here, the previous untracked trip is likely missing,
|
|
88
|
+
// which implies the current trip is also missing
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
static isTripCanceled(departure) {
|
|
92
|
+
return !!departure.is_canceled;
|
|
93
|
+
}
|
|
94
|
+
static isVehicleAtStop(departure) {
|
|
95
|
+
if (!("arrival_datetime" in departure)) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
const isAtStop = departure.stop_sequence === departure["trip.last_position.this_stop_sequence"];
|
|
99
|
+
const isPassStop = !!departure["trip.last_position.last_stop_sequence"] &&
|
|
100
|
+
departure.stop_sequence <= departure["trip.last_position.last_stop_sequence"];
|
|
101
|
+
return isAtStop || isPassStop;
|
|
102
|
+
}
|
|
103
|
+
static isOutsideStartThreshold(minutesToStart, routeType) {
|
|
104
|
+
const isMetro = routeType === RouteTypeEnums_1.GTFSRouteTypeEnum.METRO;
|
|
105
|
+
return isMetro ? minutesToStart >= const_1.START_SOON_METRO_MINUTES_THRESHOLD : minutesToStart >= const_1.START_SOON_MINUTES_THRESHOLD;
|
|
106
|
+
}
|
|
107
|
+
static hasAlreadyDeparted(minutesToStart) {
|
|
108
|
+
return minutesToStart < const_1.DEPARTURED_MINUTES_THRESHOLD;
|
|
109
|
+
}
|
|
110
|
+
static hasLargeTimegapBetweenTrips(endTimestamp, startTimestamp) {
|
|
111
|
+
const minutesAfterPrevious = (startTimestamp.getTime() - endTimestamp.getTime()) / 60000;
|
|
112
|
+
return minutesAfterPrevious >= const_1.TRIP_GAP_MINUTES_THRESHOLD;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.SkipHelper = SkipHelper;
|
|
116
|
+
//# sourceMappingURL=SkipHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkipHelper.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/models/helpers/SkipHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TRIP_GAP_MINUTES_THRESHOLD = exports.DEPARTURED_MINUTES_THRESHOLD = exports.START_SOON_METRO_MINUTES_THRESHOLD = exports.START_SOON_MINUTES_THRESHOLD = void 0;
|
|
4
|
+
exports.START_SOON_MINUTES_THRESHOLD = 30;
|
|
5
|
+
exports.START_SOON_METRO_MINUTES_THRESHOLD = 5;
|
|
6
|
+
exports.DEPARTURED_MINUTES_THRESHOLD = -2;
|
|
7
|
+
exports.TRIP_GAP_MINUTES_THRESHOLD = 60;
|
|
8
|
+
//# sourceMappingURL=const.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/models/helpers/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAClC,QAAA,kCAAkC,GAAG,CAAC,CAAC;AACvC,QAAA,4BAA4B,GAAG,CAAC,CAAC,CAAC;AAClC,QAAA,0BAA0B,GAAG,EAAE,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DepartureFilter, DepartureMode, DepartureOrder, DepartureSkip } from "../../..";
|
|
2
2
|
import { IRopidDeparturesDirectionsOutput } from "../../../../../schema-definitions/ropid-departures-directions";
|
|
3
|
+
import { IScheduleDto } from "../../../../../schema-definitions/vehicle-positions/redis/interfaces/IGtfsRunTripCacheDto";
|
|
3
4
|
export default interface IPIDDepartureQueryOptions {
|
|
4
5
|
limit: number;
|
|
5
6
|
offset: number;
|
|
@@ -10,5 +11,7 @@ export default interface IPIDDepartureQueryOptions {
|
|
|
10
11
|
skip: DepartureSkip[];
|
|
11
12
|
departuresDirections: IRopidDeparturesDirectionsOutput[];
|
|
12
13
|
timezone: string;
|
|
13
|
-
tripNumber
|
|
14
|
+
tripNumber: string | null;
|
|
15
|
+
runScheduleMap: Map<string, IScheduleDto[]> | null;
|
|
16
|
+
untrackedTrips: Set<string> | null;
|
|
14
17
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DepartureFilter, DepartureMode, DepartureOrder, DepartureSkip } from "../..";
|
|
2
|
+
import type { Moment } from "@golemio/core/dist/shared/moment-timezone";
|
|
3
|
+
export interface IGetDeparturesOptions {
|
|
4
|
+
aswIds?: string[];
|
|
5
|
+
cisIds?: string[];
|
|
6
|
+
gtfsIds?: string[];
|
|
7
|
+
names?: string[];
|
|
8
|
+
total: number;
|
|
9
|
+
limit: number;
|
|
10
|
+
offset: number;
|
|
11
|
+
mode: DepartureMode;
|
|
12
|
+
minutesBefore: number;
|
|
13
|
+
minutesAfter: number;
|
|
14
|
+
timeFrom?: Moment;
|
|
15
|
+
order: DepartureOrder;
|
|
16
|
+
filter: DepartureFilter;
|
|
17
|
+
skip: DepartureSkip[];
|
|
18
|
+
includeMetroTrains?: boolean;
|
|
19
|
+
airCondition?: boolean;
|
|
20
|
+
timezone: string;
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IGetDeparturesOptions.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/models/interfaces/IGetDeparturesOptions.ts"],"names":[],"mappings":""}
|
|
@@ -20,7 +20,7 @@ class V3PIDRouter extends AbstractRouter_1.AbstractRouter {
|
|
|
20
20
|
this.registerInfotextsRoutes = () => {
|
|
21
21
|
this.router.get("/transferboards", [
|
|
22
22
|
(0, express_validator_1.query)("cisId").exists().isInt().not().isArray(),
|
|
23
|
-
(0, express_validator_1.query)("tripNumber").
|
|
23
|
+
(0, express_validator_1.query)("tripNumber").optional().isInt({ min: 0 }).not().isArray(),
|
|
24
24
|
(0, express_validator_1.query)("timeFrom").optional().isISO8601().custom(ParamValidatorManager_1.ParamValidatorManager.getTimeFromValidator()).not().isArray(),
|
|
25
25
|
], Validation_1.checkErrors,
|
|
26
26
|
// max-age 5 seconds, stale-while-revalidate 5 seconds
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"V3PIDRouter.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/routers/v3/V3PIDRouter.ts"],"names":[],"mappings":";;;AAEA,+EAA8E;AAC9E,qCAAgD;AAChD,qDAAoD;AACpD,yDAAoD;AACpD,sFAAmF;AAEnF,6EAA2E;AAC3E,+DAAuE;AACvE,+DAA2D;AAC3D,mFAAoE;AAEpE,MAAa,WAAY,SAAQ,+BAAc;IAM3C;QACI,KAAK,CAAC,wBAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QANlB,WAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QAaxB,eAAU,GAAG,GAAS,EAAE;YAC9B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACnC,CAAC,CAAC;QAEM,4BAAuB,GAAG,GAAG,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CACX,iBAAiB,EACjB;gBACI,IAAA,yBAAK,EAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;gBAC/C,IAAA,yBAAK,EAAC,YAAY,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"V3PIDRouter.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/routers/v3/V3PIDRouter.ts"],"names":[],"mappings":";;;AAEA,+EAA8E;AAC9E,qCAAgD;AAChD,qDAAoD;AACpD,yDAAoD;AACpD,sFAAmF;AAEnF,6EAA2E;AAC3E,+DAAuE;AACvE,+DAA2D;AAC3D,mFAAoE;AAEpE,MAAa,WAAY,SAAQ,+BAAc;IAM3C;QACI,KAAK,CAAC,wBAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QANlB,WAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QAaxB,eAAU,GAAG,GAAS,EAAE;YAC9B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACnC,CAAC,CAAC;QAEM,4BAAuB,GAAG,GAAG,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CACX,iBAAiB,EACjB;gBACI,IAAA,yBAAK,EAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;gBAC/C,IAAA,yBAAK,EAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;gBAChE,IAAA,yBAAK,EAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,6CAAqB,CAAC,oBAAoB,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;aAChH,EACD,wBAAW;YACX,sDAAsD;YACtD,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC9C,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CACtD,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CACX,YAAY,EACZ,wBAAW;YACX,wDAAwD;YACxD,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAChD,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAC3C,CAAC;QACN,CAAC,CAAC;QA/BE,IAAI,CAAC,qBAAqB,GAAG,mBAAc,CAAC,OAAO,CAAwB,oBAAc,CAAC,qBAAqB,CAAC,CAAC;QACjH,IAAI,CAAC,wBAAwB,GAAG,mBAAc,CAAC,OAAO,CAA6B,uBAAU,CAAC,0BAA0B,CAAC,CAAC;QAC1H,IAAI,CAAC,mBAAmB,GAAG,mBAAc,CAAC,OAAO,CAAwB,uBAAU,CAAC,qBAAqB,CAAC,CAAC;QAC3G,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;CA4BJ;AAxCD,kCAwCC;AAED,MAAM,WAAW,GAAmB,IAAI,WAAW,EAAE,CAAC;AAC7C,kCAAW"}
|
|
@@ -12,7 +12,7 @@ export declare class TransferFacade {
|
|
|
12
12
|
* - Process them (filter, sort, etc.)
|
|
13
13
|
* - Transform them to DTO
|
|
14
14
|
*/
|
|
15
|
-
getTransferDepartures(stopIds: string[], tripNumber: string, currentMoment: Moment, minutesOffset: number, timeZone?: string): Promise<ITransferOutputDto[]>;
|
|
15
|
+
getTransferDepartures(stopIds: string[], tripNumber: string | null, currentMoment: Moment, minutesOffset: number, timeZone?: string): Promise<ITransferOutputDto[]>;
|
|
16
16
|
/**
|
|
17
17
|
* Fallback options as defined by ROPID
|
|
18
18
|
*/
|
|
@@ -84,6 +84,8 @@ let TransferFacade = exports.TransferFacade = class TransferFacade {
|
|
|
84
84
|
filter: pid_1.DepartureFilter.ROUTE_HEADING_ONCE_NOGAP_FILL,
|
|
85
85
|
skip: [pid_1.DepartureSkip.CANCELED],
|
|
86
86
|
departuresDirections: [],
|
|
87
|
+
runScheduleMap: null,
|
|
88
|
+
untrackedTrips: null, // not used in this context
|
|
87
89
|
};
|
|
88
90
|
}
|
|
89
91
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransferFacade.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/service/facade/TransferFacade.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,+BAAgI;AAChI,mDAA2D;AAC3D,qDAAoD;AACpD,+FAA0E;AAC1E,0HAAoG;AACpG,4CAA8C;AAC9C,6EAA8F;AAE9F,iEAAwE;AACxE,wGAAqG;AAG9F,IAAM,cAAc,4BAApB,MAAM,cAAc;IACvB,YACqD,mBAAyC,EAC9B,uBAAwD;QADnE,wBAAmB,GAAnB,mBAAmB,CAAsB;QAC9B,4BAAuB,GAAvB,uBAAuB,CAAiC;IACrH,CAAC;IAEJ;;;;;OAKG;IACI,KAAK,CAAC,qBAAqB,CAC9B,OAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"TransferFacade.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/service/facade/TransferFacade.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,+BAAgI;AAChI,mDAA2D;AAC3D,qDAAoD;AACpD,+FAA0E;AAC1E,0HAAoG;AACpG,4CAA8C;AAC9C,6EAA8F;AAE9F,iEAAwE;AACxE,wGAAqG;AAG9F,IAAM,cAAc,4BAApB,MAAM,cAAc;IACvB,YACqD,mBAAyC,EAC9B,uBAAwD;QADnE,wBAAmB,GAAnB,mBAAmB,CAAsB;QAC9B,4BAAuB,GAAvB,uBAAuB,CAAiC;IACrH,CAAC;IAEJ;;;;;OAKG;IACI,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,mBAAmB,CAAC,qBAAqB,CAAC;gBACrE,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;YAED,MAAM,IAAI,6BAAY,CAAC,uCAAuC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;SACtG;QAED,OAAO,kBAAkB,CAAC;IAC9B,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;CACJ,CAAA;yBA3EY,cAAc;IAD1B,IAAA,qBAAU,GAAE;IAGJ,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,oBAAoB,CAAC,CAAA;IACvC,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,+BAA+B,CAAC,CAAA;qCADmB,kCAAoB;QACL,iEAA+B;GAH/G,cAAc,CA2E1B"}
|
|
@@ -8,10 +8,12 @@ export declare class PublicVehiclePositionsRepository implements IVehiclePositio
|
|
|
8
8
|
private log;
|
|
9
9
|
private setName;
|
|
10
10
|
constructor(redisConnector: IoRedisConnector, log: ILogger);
|
|
11
|
+
setCurrentSetName(name: string): void;
|
|
11
12
|
getAllVehicleIds(boundingBox: IBoundingBoxWithCenter): Promise<string[]>;
|
|
12
13
|
getAllVehiclePositions(vehicleIds: string[], tripIds?: string[]): Promise<IPublicApiCacheDto[]>;
|
|
13
14
|
getAllVehiclePositionsForMultipleTrips(tripIds: string[]): Promise<Map<string, IPublicApiCacheDto[]>>;
|
|
14
|
-
|
|
15
|
+
getTripsWithUntrackedVehicles(tripIds: string[]): Promise<Set<string>>;
|
|
15
16
|
getDetailedVehiclePosition(vehicleId: string, tripId?: string): Promise<IPublicApiCacheDto | null>;
|
|
16
|
-
|
|
17
|
+
private getVehicleIdsForMultiple;
|
|
18
|
+
private getCanceledTrips;
|
|
17
19
|
}
|
|
@@ -24,6 +24,9 @@ let PublicVehiclePositionsRepository = exports.PublicVehiclePositionsRepository
|
|
|
24
24
|
this.log = log;
|
|
25
25
|
this.setName = undefined; // loaded via pub sub
|
|
26
26
|
}
|
|
27
|
+
setCurrentSetName(name) {
|
|
28
|
+
this.setName = name;
|
|
29
|
+
}
|
|
27
30
|
async getAllVehicleIds(boundingBox) {
|
|
28
31
|
if (!this.setName) {
|
|
29
32
|
this.log.debug("Empty setName for public vehicle positions api.");
|
|
@@ -37,8 +40,8 @@ let PublicVehiclePositionsRepository = exports.PublicVehiclePositionsRepository
|
|
|
37
40
|
try {
|
|
38
41
|
vehicleIds = (await connection.geosearch(this.setName, "FROMLONLAT", boundingBox.centerPoint.longitude, boundingBox.centerPoint.latitude, "BYBOX", boundingBox.width, boundingBox.height, "m", "ASC"));
|
|
39
42
|
}
|
|
40
|
-
catch (
|
|
41
|
-
throw new golemio_errors_1.GeneralError(
|
|
43
|
+
catch (error) {
|
|
44
|
+
throw new golemio_errors_1.GeneralError("Cannot get vehicle ids from cache", this.constructor.name, error);
|
|
42
45
|
}
|
|
43
46
|
return vehicleIds;
|
|
44
47
|
}
|
|
@@ -61,8 +64,8 @@ let PublicVehiclePositionsRepository = exports.PublicVehiclePositionsRepository
|
|
|
61
64
|
}
|
|
62
65
|
vehiclePositions = await connection.mget(keys);
|
|
63
66
|
}
|
|
64
|
-
catch (
|
|
65
|
-
throw new golemio_errors_1.GeneralError(
|
|
67
|
+
catch (error) {
|
|
68
|
+
throw new golemio_errors_1.GeneralError("Cannot get vehicle positions from cache", this.constructor.name, error);
|
|
66
69
|
}
|
|
67
70
|
const parsedVehiclePositions = [];
|
|
68
71
|
for (const vehiclePosition of vehiclePositions) {
|
|
@@ -72,8 +75,8 @@ let PublicVehiclePositionsRepository = exports.PublicVehiclePositionsRepository
|
|
|
72
75
|
try {
|
|
73
76
|
parsedVehiclePositions.push(JSON.parse(vehiclePosition));
|
|
74
77
|
}
|
|
75
|
-
catch (
|
|
76
|
-
throw new golemio_errors_1.GeneralError(
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw new golemio_errors_1.GeneralError("Cannot parse vehicle position", this.constructor.name, error);
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
82
|
return parsedVehiclePositions;
|
|
@@ -87,46 +90,20 @@ let PublicVehiclePositionsRepository = exports.PublicVehiclePositionsRepository
|
|
|
87
90
|
if (!this.redisConnector.isConnected()) {
|
|
88
91
|
await this.redisConnector.connect();
|
|
89
92
|
}
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
futurePipeline.lrange(`${this.setName}:future-trip-${tripId}`, 0, -1);
|
|
98
|
-
}
|
|
99
|
-
try {
|
|
100
|
-
const [trips, futureTrips] = await Promise.all([pipeline.exec(), futurePipeline.exec()]);
|
|
101
|
-
for (const [err, vehicleIds] of trips) {
|
|
102
|
-
if (err) {
|
|
103
|
-
throw new golemio_errors_1.GeneralError("Cannot get vehicle ids for trip from cache", this.constructor.name, err);
|
|
104
|
-
}
|
|
105
|
-
vehicleIdsByTrip.set(tripIds[vehicleIdsByTrip.size], vehicleIds);
|
|
106
|
-
}
|
|
107
|
-
for (const [err, vehicleIds] of futureTrips) {
|
|
108
|
-
if (err) {
|
|
109
|
-
throw new golemio_errors_1.GeneralError("Cannot get vehicle ids for future-trip from cache", this.constructor.name, err);
|
|
110
|
-
}
|
|
111
|
-
vehicleIdsByFutureTrip.set(tripIds[vehicleIdsByFutureTrip.size], vehicleIds);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
catch (err) {
|
|
115
|
-
if (err instanceof golemio_errors_1.GeneralError) {
|
|
116
|
-
throw err;
|
|
117
|
-
}
|
|
118
|
-
throw new golemio_errors_1.GeneralError("Cannot get vehicle ids for trip from cache", this.constructor.name, err);
|
|
119
|
-
}
|
|
120
|
-
const positionValues = Array.from(new Set([...vehicleIdsByTrip.values(), ...vehicleIdsByFutureTrip.values()].flat()));
|
|
121
|
-
if (positionValues.length > 0) {
|
|
122
|
-
const allPositions = await this.getAllVehiclePositions(positionValues);
|
|
93
|
+
const [vehicleIdsCurrent, vehicleIdsFuture] = await Promise.all([
|
|
94
|
+
this.getVehicleIdsForMultiple(tripIds, "trip"),
|
|
95
|
+
this.getVehicleIdsForMultiple(tripIds, "future-trip"),
|
|
96
|
+
]);
|
|
97
|
+
const vehicleIds = Array.from(new Set([...vehicleIdsCurrent, ...vehicleIdsFuture]));
|
|
98
|
+
if (vehicleIds.length > 0) {
|
|
99
|
+
const allPositions = await this.getAllVehiclePositions(vehicleIds);
|
|
123
100
|
for (const position of allPositions) {
|
|
124
101
|
if (!positionsByTrip.has(position.gtfs_trip_id)) {
|
|
125
102
|
positionsByTrip.set(position.gtfs_trip_id, []);
|
|
126
103
|
}
|
|
127
104
|
positionsByTrip.get(position.gtfs_trip_id).push(position);
|
|
128
105
|
}
|
|
129
|
-
const futurePositions = await this.getAllVehiclePositions(
|
|
106
|
+
const futurePositions = await this.getAllVehiclePositions(vehicleIds, tripIds);
|
|
130
107
|
for (const position of futurePositions) {
|
|
131
108
|
if (!positionsByTrip.has(position.gtfs_trip_id)) {
|
|
132
109
|
positionsByTrip.set(position.gtfs_trip_id, []);
|
|
@@ -140,31 +117,29 @@ let PublicVehiclePositionsRepository = exports.PublicVehiclePositionsRepository
|
|
|
140
117
|
}
|
|
141
118
|
return positionsByTrip;
|
|
142
119
|
}
|
|
143
|
-
async
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
return
|
|
120
|
+
async getTripsWithUntrackedVehicles(tripIds) {
|
|
121
|
+
const untrackedTrips = new Set();
|
|
122
|
+
if (!this.setName || tripIds.length === 0) {
|
|
123
|
+
this.log.debug("Empty setName for public vehicle positions api or empty trip ids.");
|
|
124
|
+
return untrackedTrips;
|
|
148
125
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
keys.push(`${this.setName}:canceled-trips-${tripId}`);
|
|
126
|
+
if (!this.redisConnector.isConnected()) {
|
|
127
|
+
await this.redisConnector.connect();
|
|
152
128
|
}
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
parsedCanceledTrips.push(JSON.parse(canceledTrip));
|
|
161
|
-
}
|
|
162
|
-
catch (err) {
|
|
163
|
-
throw new golemio_errors_1.GeneralError(`${this.constructor.name}: Cannot parse canceled trip: ${err.message}`, this.constructor.name, err);
|
|
129
|
+
const vehicleIds = await this.getVehicleIdsForMultiple(tripIds, "trip");
|
|
130
|
+
try {
|
|
131
|
+
// TODO optimization point here - use JSON.GET once it's available in the redis/valkey server
|
|
132
|
+
const allPositions = await this.getAllVehiclePositions(vehicleIds);
|
|
133
|
+
for (let i = 0; i < allPositions.length; i++) {
|
|
134
|
+
if (allPositions[i].delay === null) {
|
|
135
|
+
untrackedTrips.add(allPositions[i].gtfs_trip_id);
|
|
164
136
|
}
|
|
165
137
|
}
|
|
166
138
|
}
|
|
167
|
-
|
|
139
|
+
catch (error) {
|
|
140
|
+
throw new golemio_errors_1.GeneralError("Cannot get vehicle positions from cache", this.constructor.name, error);
|
|
141
|
+
}
|
|
142
|
+
return untrackedTrips;
|
|
168
143
|
}
|
|
169
144
|
// Current trips are saved in the cache with key made from vehicleId only. For future trips tripId has to be also provided.
|
|
170
145
|
async getDetailedVehiclePosition(vehicleId, tripId) {
|
|
@@ -181,9 +156,9 @@ let PublicVehiclePositionsRepository = exports.PublicVehiclePositionsRepository
|
|
|
181
156
|
const key = tripId ? `${this.setName}:future-trip-${vehicleId}-${tripId}` : `${this.setName}:vehicle-${vehicleId}`;
|
|
182
157
|
vehiclePosition = await connection.get(key);
|
|
183
158
|
}
|
|
184
|
-
catch (
|
|
185
|
-
this.log.error(
|
|
186
|
-
throw new golemio_errors_1.GeneralError(
|
|
159
|
+
catch (error) {
|
|
160
|
+
this.log.error(error, "Cannot get vehicle position from cache");
|
|
161
|
+
throw new golemio_errors_1.GeneralError("Cannot get vehicle position from cache", this.constructor.name, error);
|
|
187
162
|
}
|
|
188
163
|
if (vehiclePosition === null) {
|
|
189
164
|
this.log.info(`${this.constructor.name}: Cannot find vehicle_id ${vehicleId}`);
|
|
@@ -192,13 +167,60 @@ let PublicVehiclePositionsRepository = exports.PublicVehiclePositionsRepository
|
|
|
192
167
|
try {
|
|
193
168
|
return JSON.parse(vehiclePosition);
|
|
194
169
|
}
|
|
195
|
-
catch (
|
|
196
|
-
this.log.error(
|
|
197
|
-
throw new golemio_errors_1.GeneralError(
|
|
170
|
+
catch (error) {
|
|
171
|
+
this.log.error(error, `Cannot parse ${vehicleId}`);
|
|
172
|
+
throw new golemio_errors_1.GeneralError(`Cannot parse ${vehicleId}`, this.constructor.name, error);
|
|
198
173
|
}
|
|
199
174
|
}
|
|
200
|
-
|
|
201
|
-
|
|
175
|
+
async getVehicleIdsForMultiple(tripIds, keyPrefix) {
|
|
176
|
+
const vehicleIdsByTrip = new Map();
|
|
177
|
+
const connection = this.redisConnector.getConnection();
|
|
178
|
+
const pipeline = connection.pipeline();
|
|
179
|
+
for (const tripId of tripIds) {
|
|
180
|
+
pipeline.lrange(`${this.setName}:${keyPrefix}-${tripId}`, 0, -1);
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
const trips = await pipeline.exec();
|
|
184
|
+
for (const [error, vehicleIds] of trips) {
|
|
185
|
+
if (error) {
|
|
186
|
+
throw new golemio_errors_1.GeneralError(`Cannot get vehicle ids for ${keyPrefix} from cache`, this.constructor.name, error);
|
|
187
|
+
}
|
|
188
|
+
vehicleIdsByTrip.set(tripIds[vehicleIdsByTrip.size], vehicleIds);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
if (error instanceof golemio_errors_1.GeneralError) {
|
|
193
|
+
throw error;
|
|
194
|
+
}
|
|
195
|
+
throw new golemio_errors_1.GeneralError(`Cannot get vehicle ids for ${keyPrefix} from cache`, this.constructor.name, error);
|
|
196
|
+
}
|
|
197
|
+
return Array.from(vehicleIdsByTrip.values()).flat();
|
|
198
|
+
}
|
|
199
|
+
async getCanceledTrips(tripIds) {
|
|
200
|
+
const connection = this.redisConnector.getConnection();
|
|
201
|
+
const parsedCanceledTrips = [];
|
|
202
|
+
if (tripIds.length === 0) {
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
205
|
+
const keys = [];
|
|
206
|
+
for (const tripId of tripIds) {
|
|
207
|
+
keys.push(`${this.setName}:canceled-trips-${tripId}`);
|
|
208
|
+
}
|
|
209
|
+
const canceledTrips = await connection.mget(keys);
|
|
210
|
+
for (const canceledTrip of canceledTrips) {
|
|
211
|
+
if (canceledTrip === null) {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
try {
|
|
216
|
+
parsedCanceledTrips.push(JSON.parse(canceledTrip));
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
throw new golemio_errors_1.GeneralError("Cannot parse canceled trip", this.constructor.name, error);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return parsedCanceledTrips;
|
|
202
224
|
}
|
|
203
225
|
};
|
|
204
226
|
exports.PublicVehiclePositionsRepository = PublicVehiclePositionsRepository = __decorate([
|
package/dist/output-gateway/public/data-access/redis/PublicVehiclePositionsRepository.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublicVehiclePositionsRepository.js","sourceRoot":"","sources":["../../../../../src/output-gateway/public/data-access/redis/PublicVehiclePositionsRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,oGAAiG;AACjG,wEAAqE;AAErE,+DAAuE;AACvE,6EAAwE;AACxE,iEAAwE;AAGjE,IAAM,gCAAgC,8CAAtC,MAAM,gCAAgC;IAGzC,YAC2C,cAAwC,EACrD,GAAoB;QADC,mBAAc,GAAd,cAAc,CAAkB;QAC7C,QAAG,GAAH,GAAG,CAAS;QAJ1C,YAAO,GAAuB,SAAS,CAAC,CAAC,qBAAqB;IAKnE,CAAC;IAEG,KAAK,CAAC,gBAAgB,CAAC,WAAmC;QAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAClE,OAAO,EAAE,CAAC;SACb;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE;YACpC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;SACvC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QACvD,IAAI,UAAU,GAAa,EAAE,CAAC;QAE9B,IAAI;YACA,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,SAAS,CACpC,IAAI,CAAC,OAAO,EACZ,YAAY,EACZ,WAAW,CAAC,WAAW,CAAC,SAAS,EACjC,WAAW,CAAC,WAAW,CAAC,QAAQ,EAChC,OAAO,EACP,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,MAAM,EAClB,GAAG,EACH,KAAK,CACR,CAAa,CAAC;SAClB;QAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"PublicVehiclePositionsRepository.js","sourceRoot":"","sources":["../../../../../src/output-gateway/public/data-access/redis/PublicVehiclePositionsRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { IPublicApiCacheDto } from "../../../../schema-definitions/vehicle-positions/redis/interfaces/IPublicApiCacheDto";
|
|
2
2
|
import { IBoundingBoxWithCenter } from "../IBoudingBox";
|
|
3
3
|
export interface IVehiclePositionsRepository {
|
|
4
|
+
setCurrentSetName(name: string): void;
|
|
4
5
|
getAllVehicleIds(boundingBox: IBoundingBoxWithCenter): Promise<string[]>;
|
|
5
6
|
getAllVehiclePositions(vehicleIds: string[]): Promise<IPublicApiCacheDto[]>;
|
|
6
7
|
getAllVehiclePositionsForMultipleTrips(tripIds: string[]): Promise<Map<string, IPublicApiCacheDto[]>>;
|
|
7
8
|
getDetailedVehiclePosition(vehicleId: string, tripdId?: string): Promise<IPublicApiCacheDto | null>;
|
|
8
|
-
|
|
9
|
+
getTripsWithUntrackedVehicles(tripIds: string[]): Promise<Set<string>>;
|
|
9
10
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IRunTripsRedisRepository } from "../../domain/repository/IRunTripsRedisRepository";
|
|
2
|
+
import { IGtfsRunTripCacheDto } from "../../../../schema-definitions/vehicle-positions/redis/interfaces/IGtfsRunTripCacheDto";
|
|
3
|
+
import { IoRedisConnector } from "@golemio/core/dist/helpers/data-access/redis/IoRedisConnector";
|
|
4
|
+
import { ILogger } from "@golemio/core/dist/helpers/logger/LoggerProvider";
|
|
5
|
+
export declare class RunTripsRedisRepository implements IRunTripsRedisRepository {
|
|
6
|
+
private redisConnector;
|
|
7
|
+
private log;
|
|
8
|
+
constructor(redisConnector: IoRedisConnector, log: ILogger);
|
|
9
|
+
getMultipleSchedule(runTuples: string[]): Promise<Array<IGtfsRunTripCacheDto | null>>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.RunTripsRedisRepository = void 0;
|
|
16
|
+
const const_1 = require("../../../../schema-definitions/ropid-gtfs/redis/const");
|
|
17
|
+
const IoRedisConnector_1 = require("@golemio/core/dist/helpers/data-access/redis/IoRedisConnector");
|
|
18
|
+
const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken");
|
|
19
|
+
const ioc_1 = require("@golemio/core/dist/output-gateway/ioc");
|
|
20
|
+
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
21
|
+
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
22
|
+
let RunTripsRedisRepository = exports.RunTripsRedisRepository = class RunTripsRedisRepository {
|
|
23
|
+
constructor(redisConnector, log) {
|
|
24
|
+
this.redisConnector = redisConnector;
|
|
25
|
+
this.log = log;
|
|
26
|
+
}
|
|
27
|
+
async getMultipleSchedule(runTuples) {
|
|
28
|
+
if (!runTuples.length) {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
if (!this.redisConnector.isConnected()) {
|
|
32
|
+
await this.redisConnector.connect();
|
|
33
|
+
}
|
|
34
|
+
const connection = this.redisConnector.getConnection();
|
|
35
|
+
let runTripCache = [];
|
|
36
|
+
try {
|
|
37
|
+
runTripCache = await connection.mget(runTuples.map((runTuple) => `${const_1.GTFS_RUN_SCHEDULE_NAMESPACE_PREFIX}:${runTuple}`));
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
throw new golemio_errors_1.GeneralError("Cannot get run trips from cache", this.constructor.name, error);
|
|
41
|
+
}
|
|
42
|
+
let gtfsRunTripDtos = [];
|
|
43
|
+
for (const cache of runTripCache) {
|
|
44
|
+
if (cache === null) {
|
|
45
|
+
this.log.info(`${this.constructor.name}: Cannot find run trip cache`);
|
|
46
|
+
gtfsRunTripDtos.push(null);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
gtfsRunTripDtos.push(JSON.parse(cache));
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
throw new golemio_errors_1.GeneralError("Cannot parse run trip cache", this.constructor.name, error);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return gtfsRunTripDtos;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
exports.RunTripsRedisRepository = RunTripsRedisRepository = __decorate([
|
|
60
|
+
(0, tsyringe_1.injectable)(),
|
|
61
|
+
__param(0, (0, tsyringe_1.inject)(ioc_1.ContainerToken.RedisConnector)),
|
|
62
|
+
__param(1, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.Logger)),
|
|
63
|
+
__metadata("design:paramtypes", [IoRedisConnector_1.IoRedisConnector, Object])
|
|
64
|
+
], RunTripsRedisRepository);
|
|
65
|
+
//# sourceMappingURL=RunTripsRedisRepository.js.map
|