@golemio/pid 5.9.1-dev.2470905594 → 5.9.1-rc.2470956325
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/output-gateway/pid/helpers/JISInfotextStopSuppressionFilter.d.ts +3 -23
- package/dist/output-gateway/pid/helpers/JISInfotextStopSuppressionFilter.js +43 -227
- package/dist/output-gateway/pid/helpers/JISInfotextStopSuppressionFilter.js.map +1 -1
- package/dist/output-gateway/pid/service/facade/InfotextFacade.d.ts +1 -1
- package/dist/output-gateway/pid/service/facade/InfotextFacade.js +3 -3
- package/dist/output-gateway/pid/service/facade/InfotextFacade.js.map +1 -1
- package/docs/implementation_documentation.md +38 -0
- package/package.json +6 -6
|
@@ -2,28 +2,8 @@ import { JISInfotextsModel } from "../../../schema-definitions/jis/models/JISInf
|
|
|
2
2
|
import { IJISInfotextDto } from "../../../schema-definitions/jis/redis/interfaces/IJISInfotextDto";
|
|
3
3
|
type InfotextUnion = JISInfotextsModel | IJISInfotextDto;
|
|
4
4
|
export declare class JISInfotextStopSuppressionFilter {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
private filterInfotextsExcludingFuture;
|
|
9
|
-
private getStopId;
|
|
10
|
-
private mapTopInfotextSeverityLevelByStopId;
|
|
11
|
-
private filterInfotextsIncludingFuture;
|
|
12
|
-
private createInfotextIntermediaries;
|
|
13
|
-
private mapInfotextsByStopId;
|
|
14
|
-
private filterStopInfotexts;
|
|
15
|
-
private segmentInfotexts;
|
|
16
|
-
private findSegmentationThreshold;
|
|
17
|
-
private addDay;
|
|
18
|
-
private segmentRepeatedInfotext;
|
|
19
|
-
private getMaxSegmentationDayForInfotext;
|
|
20
|
-
private getDatetimeFromRepeatTime;
|
|
21
|
-
private fitFiniteSegmentToInfotextTimeBounds;
|
|
22
|
-
private sortAndFilterSegments;
|
|
23
|
-
private isSegmentBLesserThanA;
|
|
24
|
-
private findUniqueInfotextsFromSegments;
|
|
25
|
-
private mapInfotextIdsByStopId;
|
|
26
|
-
private filterAllInfotexts;
|
|
27
|
-
private createInfotextsFromIntermediaries;
|
|
5
|
+
filterBySeverityLevel<T extends InfotextUnion>(list: T[]): T[];
|
|
6
|
+
private isStopPresentInHigherSeverityLevels;
|
|
7
|
+
private mapSeverityLevelToNumber;
|
|
28
8
|
}
|
|
29
9
|
export {};
|
|
@@ -7,250 +7,66 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.JISInfotextStopSuppressionFilter = void 0;
|
|
10
|
-
const JISInfotextSeverityLevelPriority_1 = require("../../../helpers/jis/JISInfotextSeverityLevelPriority");
|
|
11
10
|
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
11
|
+
const MAX_SEVERITY_LEVEL = 2;
|
|
12
12
|
let JISInfotextStopSuppressionFilter = class JISInfotextStopSuppressionFilter {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
filterInfotextsExcludingFuture(infotexts) {
|
|
22
|
-
const topInfotextSeverityLevelByStopId = this.mapTopInfotextSeverityLevelByStopId(infotexts);
|
|
23
|
-
const filteredInfotexts = [];
|
|
24
|
-
for (const infotext of infotexts) {
|
|
13
|
+
filterBySeverityLevel(list) {
|
|
14
|
+
const stopsBySeverity = new Map([
|
|
15
|
+
[MAX_SEVERITY_LEVEL, new Set()], // SEVERE
|
|
16
|
+
[1, new Set()], // WARNING
|
|
17
|
+
[0, new Set()], // INFO
|
|
18
|
+
]);
|
|
19
|
+
let filteredList = [];
|
|
20
|
+
for (const infotext of list) {
|
|
25
21
|
if (!infotext.stops) {
|
|
26
22
|
continue;
|
|
27
23
|
}
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
filteredInfotexts.push(infotext);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return filteredInfotexts;
|
|
38
|
-
}
|
|
39
|
-
getStopId(stop) {
|
|
40
|
-
if ("getDataValue" in stop && typeof stop.getDataValue === "function") {
|
|
41
|
-
return stop.getDataValue("stop_id");
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
return stop.stop_id;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
mapTopInfotextSeverityLevelByStopId(infotexts) {
|
|
48
|
-
const topInfotextSeverityLevelByStopId = new Map();
|
|
49
|
-
for (const infotext of infotexts) {
|
|
50
|
-
const infotextPrio = JISInfotextSeverityLevelPriority_1.JISInfotextSeverityLevelPriority[infotext.severity_level];
|
|
51
|
-
for (const stop of infotext.stops ?? []) {
|
|
52
|
-
const currentValue = topInfotextSeverityLevelByStopId.get(this.getStopId(stop)) ?? -Infinity;
|
|
53
|
-
if (infotextPrio > currentValue) {
|
|
54
|
-
topInfotextSeverityLevelByStopId.set(this.getStopId(stop), infotextPrio);
|
|
24
|
+
const severity = this.mapSeverityLevelToNumber(infotext.severity_level);
|
|
25
|
+
for (let i = infotext.stops.length - 1; i >= 0; i--) {
|
|
26
|
+
const stop = infotext.stops[i];
|
|
27
|
+
let stopId;
|
|
28
|
+
if ("getDataValue" in stop && typeof stop.getDataValue === "function") {
|
|
29
|
+
stopId = stop.getDataValue("stop_id");
|
|
55
30
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const filteredInfotexts = this.filterAllInfotexts(infotextIntermediaries, filteredInfotextsIdsByStopId);
|
|
70
|
-
return this.createInfotextsFromIntermediaries(filteredInfotexts);
|
|
71
|
-
}
|
|
72
|
-
createInfotextIntermediaries(infotexts) {
|
|
73
|
-
return infotexts.map((infotext) => ({
|
|
74
|
-
data: infotext,
|
|
75
|
-
active_period_start: new Date(infotext.active_period_start),
|
|
76
|
-
active_period_end: infotext.active_period_end ? new Date(infotext.active_period_end) : null,
|
|
77
|
-
}));
|
|
78
|
-
}
|
|
79
|
-
mapInfotextsByStopId(infotexts) {
|
|
80
|
-
const infotextsByStopId = new Map();
|
|
81
|
-
for (const infotext of infotexts) {
|
|
82
|
-
for (const stop of infotext.data.stops ?? []) {
|
|
83
|
-
const stopId = this.getStopId(stop);
|
|
84
|
-
if (!infotextsByStopId.has(stopId)) {
|
|
85
|
-
infotextsByStopId.set(stopId, []);
|
|
31
|
+
else {
|
|
32
|
+
stopId = stop.stop_id;
|
|
33
|
+
}
|
|
34
|
+
if (severity === MAX_SEVERITY_LEVEL) {
|
|
35
|
+
stopsBySeverity.get(severity).add(stopId);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
let isStopPresent = this.isStopPresentInHigherSeverityLevels(severity, stopId, stopsBySeverity);
|
|
39
|
+
if (isStopPresent) {
|
|
40
|
+
infotext.stops.splice(i, 1);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
stopsBySeverity.get(severity).add(stopId);
|
|
86
44
|
}
|
|
87
|
-
const infotextsForStop = infotextsByStopId.get(stopId);
|
|
88
|
-
infotextsForStop.push(infotext);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return infotextsByStopId;
|
|
92
|
-
}
|
|
93
|
-
filterStopInfotexts(infotexts) {
|
|
94
|
-
const segments = this.segmentInfotexts(infotexts);
|
|
95
|
-
const filteredSegments = this.sortAndFilterSegments(segments);
|
|
96
|
-
return this.findUniqueInfotextsFromSegments(filteredSegments);
|
|
97
|
-
}
|
|
98
|
-
segmentInfotexts(infotexts) {
|
|
99
|
-
const maxSegmentationDate = this.findSegmentationThreshold(infotexts);
|
|
100
|
-
const segments = [];
|
|
101
|
-
for (const infotext of infotexts) {
|
|
102
|
-
if (infotext.data.repeat_enabled) {
|
|
103
|
-
segments.push(...this.segmentRepeatedInfotext(infotext, maxSegmentationDate));
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
const start = infotext.active_period_start;
|
|
107
|
-
const end = infotext.active_period_end;
|
|
108
|
-
segments.push({ infotext, start, end });
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return segments;
|
|
112
|
-
}
|
|
113
|
-
findSegmentationThreshold(infotexts) {
|
|
114
|
-
let maxEndDate = new Date(0);
|
|
115
|
-
let maxStartDate = new Date(0);
|
|
116
|
-
for (const infotext of infotexts) {
|
|
117
|
-
if (infotext.active_period_end && infotext.active_period_end > maxEndDate) {
|
|
118
|
-
maxEndDate = infotext.active_period_end;
|
|
119
45
|
}
|
|
120
|
-
if (infotext.
|
|
121
|
-
|
|
46
|
+
if (infotext.stops.length > 0) {
|
|
47
|
+
filteredList.push(infotext);
|
|
122
48
|
}
|
|
123
49
|
}
|
|
124
|
-
return
|
|
50
|
+
return filteredList;
|
|
125
51
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
*segmentRepeatedInfotext(infotext, segmentationThreshold) {
|
|
132
|
-
// Repeat time windows going through or ending at midnight (e.g. 23:00-01:00, 23:00-00:00)
|
|
133
|
-
const isInfotextActiveUntilOrOverMidnight = infotext.data.repeat_time_end < infotext.data.repeat_time_start;
|
|
134
|
-
const minSegmentationDay = isInfotextActiveUntilOrOverMidnight
|
|
135
|
-
? this.addDay(infotext.active_period_start, -1)
|
|
136
|
-
: infotext.active_period_start;
|
|
137
|
-
const maxSegmentationDay = this.getMaxSegmentationDayForInfotext(infotext, segmentationThreshold);
|
|
138
|
-
for (let day = minSegmentationDay; day <= maxSegmentationDay; day = this.addDay(day)) {
|
|
139
|
-
const start = this.getDatetimeFromRepeatTime(infotext.data.repeat_time_start, day);
|
|
140
|
-
let end = this.getDatetimeFromRepeatTime(infotext.data.repeat_time_end, day);
|
|
141
|
-
if (isInfotextActiveUntilOrOverMidnight) {
|
|
142
|
-
end = this.addDay(end);
|
|
143
|
-
}
|
|
144
|
-
const boundedSegment = this.fitFiniteSegmentToInfotextTimeBounds({ infotext, start, end });
|
|
145
|
-
if (!boundedSegment) {
|
|
146
|
-
continue;
|
|
52
|
+
isStopPresentInHigherSeverityLevels(currentSeverity, stopId, stopsBySeverity) {
|
|
53
|
+
for (let i = currentSeverity + 1; i <= MAX_SEVERITY_LEVEL; i++) {
|
|
54
|
+
if (stopsBySeverity.get(i).has(stopId)) {
|
|
55
|
+
return true;
|
|
147
56
|
}
|
|
148
|
-
yield boundedSegment;
|
|
149
|
-
}
|
|
150
|
-
if (!infotext.active_period_end) {
|
|
151
|
-
const start = this.getDatetimeFromRepeatTime(infotext.data.repeat_time_start, this.addDay(maxSegmentationDay));
|
|
152
|
-
yield { infotext, start, end: null };
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
getMaxSegmentationDayForInfotext(infotext, segmentationThreshold) {
|
|
156
|
-
return infotext.active_period_end && infotext.active_period_end <= segmentationThreshold
|
|
157
|
-
? infotext.active_period_end
|
|
158
|
-
: segmentationThreshold;
|
|
159
|
-
}
|
|
160
|
-
getDatetimeFromRepeatTime(repeatTime, day) {
|
|
161
|
-
const [hours, minutes, seconds] = repeatTime.split(":").map((fragment) => parseInt(fragment, 10));
|
|
162
|
-
const datetime = new Date(day);
|
|
163
|
-
datetime.setHours(hours, minutes, seconds ?? 0, 0);
|
|
164
|
-
return datetime;
|
|
165
|
-
}
|
|
166
|
-
fitFiniteSegmentToInfotextTimeBounds(segment) {
|
|
167
|
-
let { infotext, start, end } = segment;
|
|
168
|
-
if (start < infotext.active_period_start) {
|
|
169
|
-
start = infotext.active_period_start;
|
|
170
|
-
}
|
|
171
|
-
if (infotext.active_period_end && end > infotext.active_period_end) {
|
|
172
|
-
end = infotext.active_period_end;
|
|
173
57
|
}
|
|
174
|
-
|
|
175
|
-
return null;
|
|
176
|
-
}
|
|
177
|
-
return { infotext, start, end };
|
|
58
|
+
return false;
|
|
178
59
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
else if (this.isSegmentBLesserThanA(a, b)) {
|
|
186
|
-
return -1;
|
|
187
|
-
}
|
|
188
|
-
else if (this.isSegmentBLesserThanA(b, a)) {
|
|
60
|
+
mapSeverityLevelToNumber(severityLevel) {
|
|
61
|
+
switch (severityLevel) {
|
|
62
|
+
case "SEVERE":
|
|
63
|
+
return MAX_SEVERITY_LEVEL;
|
|
64
|
+
case "WARNING":
|
|
189
65
|
return 1;
|
|
190
|
-
|
|
191
|
-
|
|
66
|
+
case "INFO":
|
|
67
|
+
default:
|
|
192
68
|
return 0;
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
const filteredSegments = [];
|
|
196
|
-
let prevSegment = segments.at(0);
|
|
197
|
-
for (let i = 1; i < segments.length; i++) {
|
|
198
|
-
const currentSegment = segments[i];
|
|
199
|
-
if (this.isSegmentBLesserThanA(prevSegment, currentSegment)) {
|
|
200
|
-
continue;
|
|
201
|
-
}
|
|
202
|
-
filteredSegments.push(prevSegment);
|
|
203
|
-
prevSegment = currentSegment;
|
|
204
|
-
}
|
|
205
|
-
if (prevSegment) {
|
|
206
|
-
filteredSegments.push(prevSegment);
|
|
207
|
-
}
|
|
208
|
-
return filteredSegments;
|
|
209
|
-
}
|
|
210
|
-
isSegmentBLesserThanA(a, b) {
|
|
211
|
-
const aIsMoreSevere = JISInfotextSeverityLevelPriority_1.JISInfotextSeverityLevelPriority[b.infotext.data.severity_level] <
|
|
212
|
-
JISInfotextSeverityLevelPriority_1.JISInfotextSeverityLevelPriority[a.infotext.data.severity_level];
|
|
213
|
-
const aDoesNotStartLater = b.start >= a.start;
|
|
214
|
-
const aDoesNotEndSooner = !a.end || (b.end && b.end <= a.end) || false;
|
|
215
|
-
const bIsWithinTimeBoundsOfA = aDoesNotStartLater && aDoesNotEndSooner;
|
|
216
|
-
return aIsMoreSevere && bIsWithinTimeBoundsOfA;
|
|
217
|
-
}
|
|
218
|
-
findUniqueInfotextsFromSegments(segments) {
|
|
219
|
-
const infotexts = new Map();
|
|
220
|
-
for (const segment of segments) {
|
|
221
|
-
infotexts.set(segment.infotext.data.id, segment.infotext);
|
|
222
|
-
}
|
|
223
|
-
return [...infotexts.values()];
|
|
224
|
-
}
|
|
225
|
-
mapInfotextIdsByStopId(infotextsByStopId) {
|
|
226
|
-
const infotextsIdsByStopId = new Map();
|
|
227
|
-
for (const [stopId, infotextsForStop] of infotextsByStopId.entries()) {
|
|
228
|
-
const infotextIdsForStop = infotextsForStop.map((infotext) => infotext.data.id);
|
|
229
|
-
infotextsIdsByStopId.set(stopId, new Set(infotextIdsForStop));
|
|
230
69
|
}
|
|
231
|
-
return infotextsIdsByStopId;
|
|
232
|
-
}
|
|
233
|
-
filterAllInfotexts(infotexts, filteredInfotextsIdsByStopId) {
|
|
234
|
-
const filteredInfotexts = [];
|
|
235
|
-
for (const infotext of infotexts) {
|
|
236
|
-
if (!infotext.data.stops) {
|
|
237
|
-
continue;
|
|
238
|
-
}
|
|
239
|
-
const filteredStops = infotext.data.stops.filter((stop) => filteredInfotextsIdsByStopId.get(this.getStopId(stop))?.has(infotext.data.id) ?? false);
|
|
240
|
-
if (filteredStops.length > 0) {
|
|
241
|
-
// Same as filterInfotextsExcludingFuture: mutate in-place rather than spreading,
|
|
242
|
-
// because spreading a Sequelize model loses its prototype-getter-backed properties.
|
|
243
|
-
// `infotext.data` is a concrete union type; direct assignment hits TypeScript's
|
|
244
|
-
// union-write restriction (requires intersection of member types). Object.assign
|
|
245
|
-
// sidesteps that while still invoking the Sequelize setter at runtime.
|
|
246
|
-
Object.assign(infotext.data, { stops: filteredStops });
|
|
247
|
-
filteredInfotexts.push(infotext);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
return filteredInfotexts;
|
|
251
|
-
}
|
|
252
|
-
createInfotextsFromIntermediaries(infotextIntermediaries) {
|
|
253
|
-
return infotextIntermediaries.map((intermediary) => intermediary.data);
|
|
254
70
|
}
|
|
255
71
|
};
|
|
256
72
|
exports.JISInfotextStopSuppressionFilter = JISInfotextStopSuppressionFilter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JISInfotextStopSuppressionFilter.js","sourceRoot":"","sources":["../../../../src/output-gateway/pid/helpers/JISInfotextStopSuppressionFilter.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"JISInfotextStopSuppressionFilter.js","sourceRoot":"","sources":["../../../../src/output-gateway/pid/helpers/JISInfotextStopSuppressionFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,10 @@ import { IInfotextDepartureOutputDto, IInfotextOverviewOutputDto, IInfotextTrans
|
|
|
4
4
|
import { JISInfotextStopSuppressionFilter } from "../../helpers/JISInfotextStopSuppressionFilter";
|
|
5
5
|
import { IGetDeparturesOptions } from "../../models/interfaces/IGetDeparturesOptions";
|
|
6
6
|
import { Moment } from "@golemio/core/dist/shared/moment-timezone";
|
|
7
|
-
import { JISInfotextCacheTransferTransformation } from "../transformations/JISInfotextCacheTransferTransformation";
|
|
8
7
|
import { JISInfotextDepartureTransformation } from "../transformations/JISInfotextDepartureTransformation";
|
|
9
8
|
import { JISInfotextOverviewTransformation } from "../transformations/JISInfotextOverviewTransformation";
|
|
10
9
|
import { JISInfotextTransferTransformation } from "../transformations/JISInfotextTransferTransformation";
|
|
10
|
+
import { JISInfotextCacheTransferTransformation } from "../transformations/JISInfotextCacheTransferTransformation";
|
|
11
11
|
export declare class InfotextFacade {
|
|
12
12
|
private infotextRepository;
|
|
13
13
|
private infotextDepartureTransformation;
|
|
@@ -13,17 +13,17 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.InfotextFacade = void 0;
|
|
16
|
-
const DateTimeUtils_1 = require("../../../../helpers/DateTimeUtils");
|
|
17
16
|
const JISInfotextsRedisRepository_1 = require("../../../jis/data-access/cache/JISInfotextsRedisRepository");
|
|
18
17
|
const JISInfotextRepository_1 = require("../../data-access/JISInfotextRepository");
|
|
19
18
|
const JISInfotextStopSuppressionFilter_1 = require("../../helpers/JISInfotextStopSuppressionFilter");
|
|
20
19
|
const OgPidToken_1 = require("../../ioc/OgPidToken");
|
|
20
|
+
const DateTimeUtils_1 = require("../../../../helpers/DateTimeUtils");
|
|
21
21
|
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
22
22
|
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
23
|
-
const JISInfotextCacheTransferTransformation_1 = require("../transformations/JISInfotextCacheTransferTransformation");
|
|
24
23
|
const JISInfotextDepartureTransformation_1 = require("../transformations/JISInfotextDepartureTransformation");
|
|
25
24
|
const JISInfotextOverviewTransformation_1 = require("../transformations/JISInfotextOverviewTransformation");
|
|
26
25
|
const JISInfotextTransferTransformation_1 = require("../transformations/JISInfotextTransferTransformation");
|
|
26
|
+
const JISInfotextCacheTransferTransformation_1 = require("../transformations/JISInfotextCacheTransferTransformation");
|
|
27
27
|
let InfotextFacade = class InfotextFacade {
|
|
28
28
|
constructor(infotextRepository, infotextDepartureTransformation, infotextTransferTransformation, infotextOverviewTransformation, infotextStopFilter, infotextsRedisRepository, cacheTransferTransformation) {
|
|
29
29
|
this.infotextRepository = infotextRepository;
|
|
@@ -131,7 +131,7 @@ let InfotextFacade = class InfotextFacade {
|
|
|
131
131
|
}
|
|
132
132
|
return DateTimeUtils_1.DateTimeUtils.isInRepeatTimeWindow(infotext.repeat_time_start, infotext.repeat_time_end, currentTime);
|
|
133
133
|
});
|
|
134
|
-
return this.infotextStopFilter.
|
|
134
|
+
return this.infotextStopFilter.filterBySeverityLevel(repeatFiltered);
|
|
135
135
|
}
|
|
136
136
|
};
|
|
137
137
|
exports.InfotextFacade = InfotextFacade;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InfotextFacade.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/service/facade/InfotextFacade.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"InfotextFacade.js","sourceRoot":"","sources":["../../../../../src/output-gateway/pid/service/facade/InfotextFacade.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4GAAoG;AACpG,mFAAkF;AAOlF,qGAAoG;AACpG,qDAAoD;AAEpD,qEAAuD;AAGvD,6EAA8F;AAE9F,iEAAwE;AACxE,8GAA2G;AAC3G,4GAAyG;AACzG,4GAAyG;AACzG,sHAAmH;AAG5G,IAAM,cAAc,GAApB,MAAM,cAAc;IACvB,YACsD,kBAAyC,EAEnF,+BAAmE,EAEnE,8BAAiE,EAEjE,8BAAiE,EACZ,kBAAoD,EACzD,wBAAqD,EAErG,2BAAmE;QAVzB,uBAAkB,GAAlB,kBAAkB,CAAuB;QAEnF,oCAA+B,GAA/B,+BAA+B,CAAoC;QAEnE,mCAA8B,GAA9B,8BAA8B,CAAmC;QAEjE,mCAA8B,GAA9B,8BAA8B,CAAmC;QACZ,uBAAkB,GAAlB,kBAAkB,CAAkC;QACzD,6BAAwB,GAAxB,wBAAwB,CAA6B;QAErG,gCAA2B,GAA3B,2BAA2B,CAAwC;IAC5E,CAAC;IAEG,KAAK,CAAC,8BAA8B,CACvC,OAAiB,EACjB,aAAqB,EACrB,OAA8B;QAE9B,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE3F,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,CAAC;YACd,CAAC;YAED,MAAM,kBAAkB,GAAkC,EAAE,CAAC;YAC7D,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAG,IAAI,CAAC,+BAA+B,CAAC,gBAAgB,CAAC;oBACtE,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC7B,CAAC,CAAC;gBAEH,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,CAAC;YAED,OAAO,kBAAkB,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,qCAAoB,EAAE,CAAC;gBACxC,MAAM,KAAK,CAAC;YAChB,CAAC;YAED,MAAM,IAAI,6BAAY,CAAC,mDAAmD,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACnH,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,6BAA6B,CACtC,OAAiB,EACjB,aAAqB,EACrB,QAAuB;QAEvB,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;YACrD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE3F,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,CAAC;YACd,CAAC;YAED,OAAO,IAAI,CAAC,8BAA8B,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,qCAAoB;gBAAE,MAAM,KAAK,CAAC;YACvD,MAAM,IAAI,6BAAY,CAAC,kDAAkD,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAClH,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAAC,aAAsB;QACvD,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAClF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;YACrF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,CAAC;YACd,CAAC;YAED,OAAO,IAAI,CAAC,8BAA8B,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,qCAAoB,EAAE,CAAC;gBACxC,MAAM,KAAK,CAAC;YAChB,CAAC;YAED,MAAM,IAAI,6BAAY,CAAC,2CAA2C,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3G,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC1B,OAAiB,EACjB,aAAmB,EACnB,QAAqB;QAErB,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,QAAQ,IAAI,aAAa,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,EAAE,CAAC;YACd,CAAC;YAED,OAAO,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,qCAAoB;gBAAE,MAAM,KAAK,CAAC;YACvD,MAAM,IAAI,6BAAY,CAAC,qDAAqD,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACrH,CAAC;IACL,CAAC;IAEO,eAAe,CAAgD,IAAS,EAAE,GAAS,EAAE,aAAa,GAAG,KAAK;QAC9G,MAAM,WAAW,GAAG,6BAAa,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC5C,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,IAAI,aAAa,EAAE,CAAC;gBAChB,wFAAwF;gBACxF,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,OAAO,6BAAa,CAAC,oBAAoB,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QACjH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;IACzE,CAAC;CACJ,CAAA;AA1IY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,qBAAU,GAAE;IAGJ,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,qBAAqB,CAAC,CAAA;IACxC,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,kCAAkC,CAAC,CAAA;IAErD,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,iCAAiC,CAAC,CAAA;IAEpD,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,iCAAiC,CAAC,CAAA;IAEpD,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,gCAAgC,CAAC,CAAA;IACnD,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,2BAA2B,CAAC,CAAA;IAC9C,WAAA,IAAA,iBAAM,EAAC,uBAAU,CAAC,sCAAsC,CAAC,CAAA;qCATY,6CAAqB;QAElD,uEAAkC;QAEnC,qEAAiC;QAEjC,qEAAiC;QACQ,mEAAgC;QAC/B,yDAA2B;QAExE,+EAAsC;GAZtE,cAAc,CA0I1B"}
|
|
@@ -1522,6 +1522,44 @@ Worker má na starost stahování VYMI (JIS) událostí a infotextů, jejich tra
|
|
|
1522
1522
|
- zdrojové tabulky
|
|
1523
1523
|
- `jis_infotexts`, `jis_infotexts_ropidgtfs_stops`, `ropidgtfs_stops`
|
|
1524
1524
|
|
|
1525
|
+
### PID Departure Boards v4
|
|
1526
|
+
|
|
1527
|
+
#### _/v4/pid/transferboards_
|
|
1528
|
+
|
|
1529
|
+
- načte odjezdy pro přestupní tabule ve vozidlech na základě aktuální polohy vozidla a aktivní infotexty exportované z aplikace VYMI (JIS) Infotexty
|
|
1530
|
+
- parametry
|
|
1531
|
+
- `aswId` + `vehicleRegistrationNumber` + `routeType` – identifikace zastávky a vozidla přes ASW číselník (vzájemně se vylučuje s `cisId`+`tripNumber`)
|
|
1532
|
+
- `cisId` + `tripNumber` – identifikace zastávky a spoje přes CIS číselník (zatím neimplementováno, vrací 501)
|
|
1533
|
+
- `timeFrom` – volitelný ISO8601 čas příjezdu (pokud není zadán, použije se reálný čas příjezdu z RT dat)
|
|
1534
|
+
- `limit` – volitelný počet odjezdů (výchozí 8, max 30)
|
|
1535
|
+
- cachováno na 5 sekund (stale-while-revalidate 5 sekund)
|
|
1536
|
+
- zdrojové cache záznamy
|
|
1537
|
+
- `gtfsStopsCache:*` – převod ASW node ID na GTFS stop_id
|
|
1538
|
+
- `gtfsDelayComputation:*` – zjištění zastávek spoje a predikovaného času příjezdu
|
|
1539
|
+
- `vpPublicCache:*` – aktuální poloha a zpoždění vozidla
|
|
1540
|
+
- `gtfsPublicDepartureCache:*` – statické odjezdy ze zastávek (vč. `connections` a `wheelchair_accessible`)
|
|
1541
|
+
- `vpPublicStopTimeCache:*` – live zastávkové časy pro spoje se známou polohou
|
|
1542
|
+
- `jisCache:*` – aktivní infotexty pro dané zastávky
|
|
1543
|
+
- načítání odjezdů z cache (`gtfsPublicDepartureCache`)
|
|
1544
|
+
- z každé zastávky se načte `max(80, min(120, limit × 10))` položek v časovém okně `[plannedTimeFrom − 61 min, plannedTimeFrom + 60 min + delay]`; lookback 61 minut zajišťuje, že se zachytí i navazující spoj, jehož plánovaný odjezd je v minulosti, ale díky vlastnímu zpoždění (až 60 minut) dorazí na zastávku až po příjezdu aktuálního vozidla
|
|
1545
|
+
- ihned po načtení se aplikuje pre-filter: odjezdy autobusů, tramvají a trolejbusů ze zastávek s jiným názvem než aktuální zastávka jsou zahozeny; metro/vlak/přívoz/lanovka procházejí vždy; odjezdy s neprázdným polem `connections[]` jsou zachovány bez ohledu na název zastávky (potenciální garantovaný přestup)
|
|
1546
|
+
- garantované přestupy (`is_guaranteed_transfer`)
|
|
1547
|
+
- označují odjezdy, které na příjezd aktuálního spoje čekají – detekováno z pole `connections` v `gtfsPublicDepartureCache`, kde `from_trip_id` odpovídá aktuálnímu spoji a `arrivalTime < departure_datetime + max_wait_sec`
|
|
1548
|
+
- zobrazované minuty u garantovaného přestupu jsou nastaveny na čas příjezdu aktuálního spoje (ne na plánovaný odjezd navazujícího spoje)
|
|
1549
|
+
- garantované přestupy jsou vyjmuty z filtru opačného směru a filtru podskupiny linky – jsou přidány do `tripIdsToKeep` před spuštěním `findRelevantTripIdsFromLines`, takže projdou bez ohledu na zastávkovou sekvenci
|
|
1550
|
+
- typy "vždy zobrazit" (metro, vlak, přívoz, lanovka) filtr `findRelevantTripIdsFromLines` zcela přeskakují
|
|
1551
|
+
- dostupnost pro vozíčkáře (`is_wheelchair_accessible`)
|
|
1552
|
+
- **metro**: určeno výhradně podle `wheelchair_boarding` zastávky (hodnota `1` = přístupná)
|
|
1553
|
+
- **ostatní typy dopravy**: primárně z RT dat vozidla (`detailed_info.is_wheelchair_accessible`); pokud RT data nejsou k dispozici, použije se GTFS příznak `wheelchair_accessible` z `trips.txt` (`1` = přístupné vozidlo)
|
|
1554
|
+
- odfiltrování odjezdů stejné linky v opačném směru (`TransferFacade.isDifferentLine`) — odjezdy se shodným `route_short_name` + `route_type`, ale odlišným `direction_id` oproti aktuálnímu vozidlu jsou odstraněny; odjezdy s neznámým `direction_id` (null) jsou ponechány
|
|
1555
|
+
- seskupování a omezení výstupu (`TransferDepartureCacheTransformation`)
|
|
1556
|
+
- **metro**: seskupuje se podle `route_short_name + route_type + direction_id`; na jeden záznam výstupu připadají až 2 hodnoty v poli `departure_timestamp.minutes[]`
|
|
1557
|
+
- **ostatní typy**: seskupuje se podle `route_short_name + route_type + direction_id`; na skupinu připadají nejvýše 2 samostatné záznamy odjezdů
|
|
1558
|
+
- `direction_id` se řeší s fallback řetězcem: `departure.direction_id` (z cache odjezdů) → `position.detailed_info.direction_id` (z RT poloh vozidel) → in-memory cache (klíč `route_short_name + trip_headsign`) → `0`
|
|
1559
|
+
- konfigurace filtrování opačného směru (backtracking)
|
|
1560
|
+
- `module.pid.vehicle-positions.transferboards.isOppositeDirectionFilterStopNameStrict` (boolean, výchozí `true`) – pokud `true`, zastávka je považována za "zpětnou" pouze pokud se shoduje `stop_id` i `stop_name`; pokud `false`, stačí shoda `stop_id`
|
|
1561
|
+
- `module.pid.vehicle-positions.transferboards.countPreviousStopsToAllow` (integer, výchozí `0`) – kolik předchozích zastávek aktuálního spoje smí kandidátní spoj sdílet ve svých nadcházejících zastávkách, než je považován za zpětný směr a odfiltrován; `0` znamená žádná shoda není povolena
|
|
1562
|
+
|
|
1525
1563
|
### Public v2
|
|
1526
1564
|
|
|
1527
1565
|
#### _/v2/public/gtfs/trips/{gtfsTripId}_
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@golemio/pid",
|
|
3
|
-
"version": "5.9.1-
|
|
3
|
+
"version": "5.9.1-rc.2470956325",
|
|
4
4
|
"description": "Golemio PID Module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"url": "https://gitlab.com/operator-ict/golemio/code/modules/pid"
|
|
34
34
|
},
|
|
35
35
|
"engines": {
|
|
36
|
-
"node": ">=
|
|
36
|
+
"node": ">=20.0.0",
|
|
37
37
|
"npm": ">=8.0.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@types/chai": "4.2.3",
|
|
49
49
|
"@types/chai-as-promised": "7.1.2",
|
|
50
50
|
"@types/mocha": "^10.0.10",
|
|
51
|
-
"@types/node": "^
|
|
51
|
+
"@types/node": "^20.12.7",
|
|
52
52
|
"@types/pg-copy-streams": "^1.2.5",
|
|
53
53
|
"@types/sinon": "^9.0.10",
|
|
54
54
|
"@types/supertest": "^2.0.10",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"dotenv": "^8.2.0",
|
|
62
62
|
"eslint": "^8.1.1",
|
|
63
63
|
"husky": "^4.3.7",
|
|
64
|
-
"mocha": "^
|
|
64
|
+
"mocha": "^10.0.0",
|
|
65
65
|
"npm-run-all": "^4.1.5",
|
|
66
66
|
"nyc": "^17.1.0",
|
|
67
67
|
"prettier": "^2.5.1",
|
|
@@ -73,12 +73,12 @@
|
|
|
73
73
|
"ts-node": "^10.9.2",
|
|
74
74
|
"ts-patch": "^3.3.0",
|
|
75
75
|
"tsconfig-paths": "^4.2.0",
|
|
76
|
-
"typedoc": "0.28.
|
|
76
|
+
"typedoc": "^0.28.14",
|
|
77
77
|
"typescript": "^5.9.3",
|
|
78
78
|
"typescript-transform-paths": "^3.5.5"
|
|
79
79
|
},
|
|
80
80
|
"peerDependencies": {
|
|
81
|
-
"@golemio/core": "^3.0.
|
|
81
|
+
"@golemio/core": "^3.0.1-dev.2 || ^3.0.0 || ^2.0.1"
|
|
82
82
|
},
|
|
83
83
|
"overrides": {
|
|
84
84
|
"@google-cloud/storage": {
|