Skip to content

Commit efd7bd3

Browse files
committed
logic change for selecting valid journey data
1 parent 8a6a633 commit efd7bd3

2 files changed

Lines changed: 51 additions & 17 deletions

File tree

src/datasources/JoreDataSource.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export class JoreDataSource extends SQLDataSource {
5353
route.date_begin,
5454
route.date_end,
5555
route.date_modified,
56+
route.date_imported,
5657
route.route_length,
5758
trunk_route,
5859
jore.route_mode(route) as mode
@@ -78,6 +79,7 @@ export class JoreDataSource extends SQLDataSource {
7879
route.date_begin,
7980
route.date_end,
8081
route.date_modified,
82+
route.date_imported,
8183
route.route_length,
8284
trunk_route,
8385
jore.route_mode(route) as mode
@@ -139,6 +141,7 @@ export class JoreDataSource extends SQLDataSource {
139141
route_segment.timing_stop_type,
140142
route_segment.stop_index,
141143
route_segment.date_modified,
144+
route_segment.date_imported,
142145
jore.route_mode(route) as mode,
143146
stop.lat,
144147
stop.lon,
@@ -189,6 +192,7 @@ export class JoreDataSource extends SQLDataSource {
189192
stop.name_fi,
190193
stop.stop_radius,
191194
route_segment.date_modified,
195+
route_segment.date_imported,
192196
route_segment.route_id,
193197
route_segment.direction,
194198
route_segment.timing_stop_type,
@@ -327,6 +331,7 @@ export class JoreDataSource extends SQLDataSource {
327331
route_segment.date_begin,
328332
route_segment.date_end,
329333
route_segment.date_modified,
334+
route_segment.date_imported,
330335
route_segment.duration,
331336
route_segment.stop_index,
332337
route_segment.distance_from_previous,
@@ -416,6 +421,7 @@ stop.terminal_id,
416421
route_segment.date_begin,
417422
route_segment.date_end,
418423
route_segment.date_modified,
424+
route_segment.date_imported,
419425
route_segment.destination_fi,
420426
route_segment.distance_from_previous,
421427
route_segment.distance_from_start,

src/utils/filterByDateGroups.ts

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,21 @@ import { groupBy, orderBy } from 'lodash'
33
import moment from 'moment-timezone'
44
import { TZ } from '../constants'
55

6-
export function filterByDateGroups<T extends ValidityRange>(items: T[], date: string): T[] {
7-
let groupedItems = groupBy<T>(items, (item: T) => `${item.date_begin}_${item.date_end}`)
8-
let hasModifiedDate = !!items[0]?.date_modified
9-
let validOnDate = moment.tz(date, TZ)
6+
type ValidityRangeWithImport = ValidityRange & {
7+
date_imported?: string
8+
}
9+
10+
export function filterByDateGroups<T extends ValidityRangeWithImport>(
11+
items: T[],
12+
date: string
13+
): T[] {
14+
const groupedItems = groupBy(items, (item) => `${item.date_begin}_${item.date_end}`)
15+
const validOnDate = moment.tz(date, TZ)
1016

11-
let validGroupEntries = Object.entries<T[]>(groupedItems).filter(([validityRange]) => {
12-
let range = validityRange.split('_')
13-
let rangeStart = moment.tz(range[0], TZ)
14-
let rangeEnd = moment.tz(range[1], TZ)
17+
const validGroupEntries = Object.entries(groupedItems).filter(([validityRange]) => {
18+
const [start, end] = validityRange.split('_')
19+
const rangeStart = moment.tz(start, TZ)
20+
const rangeEnd = moment.tz(end, TZ)
1521

1622
return validOnDate.isBetween(rangeStart, rangeEnd, 'day', '[]')
1723
})
@@ -27,16 +33,38 @@ export function filterByDateGroups<T extends ValidityRange>(items: T[], date: st
2733
return validGroupEntries[0][1]
2834
}
2935

30-
let orderedGroups = orderBy(
36+
const getLatestAllowedImportUnix = (groupItems: T[]) => {
37+
const allowedImports = groupItems
38+
.map((item) => item.date_imported)
39+
.filter((d): d is string => !!d)
40+
.map((d) => moment.tz(d, TZ))
41+
.filter((importDate) => importDate.isSameOrBefore(validOnDate, 'day'))
42+
43+
if (allowedImports.length === 0) {
44+
return null
45+
}
46+
47+
return Math.max(...allowedImports.map((d) => d.unix()))
48+
}
49+
50+
const hasAnyAllowedImports = validGroupEntries.some(([, groupItems]) => {
51+
return getLatestAllowedImportUnix(groupItems) !== null
52+
})
53+
54+
const orderedGroups = orderBy(
3155
validGroupEntries,
32-
([, items]) => {
33-
// if (hasModifiedDate) {
34-
// return moment(items[0].date_modified).unix()
35-
// }
36-
37-
return moment(items[0].date_begin).unix()
38-
},
39-
'desc'
56+
hasAnyAllowedImports
57+
? [
58+
// First order by the latest allowed date_imported, so that groups with more recent imports that are still valid on the UI date come first.
59+
([, groupItems]) => getLatestAllowedImportUnix(groupItems) ?? 0,
60+
// If there are multiple groups with the same latest allowed import date order those groups by date_begin.
61+
([, groupItems]) => moment.tz(groupItems[0].date_begin, TZ).unix(),
62+
]
63+
: [
64+
// If there are no allowed date_importeds just order by date_begin.
65+
([, groupItems]) => moment.tz(groupItems[0].date_begin, TZ).unix(),
66+
],
67+
hasAnyAllowedImports ? ['desc', 'desc'] : ['desc']
4068
)
4169

4270
return orderedGroups[0][1] // Select the items from the first, ie most valid, group.

0 commit comments

Comments
 (0)