6d66e8f25b
Add system ID prefix to all Redis keys to prevent cross-system ID clashes
...
When multiple university systems share the same Redis instance, entity IDs
(shuttles, stops, routes, etc.) could collide. This namespaces all Redis
keys with the system ID (e.g., `1:shuttle:stop:123` instead of
`shuttle:stop:123`).
- Add systemId field and prefixKey() helper to BaseRedisRepository
- Update all Redis repository subclasses to use prefixed keys
- Wire system ID from InterchangeSystem.build() into Redis repositories
- Add migration utility (migrateRedisKeysToSystemPrefix) with tests
- Update all test holders to pass a test system ID
https://claude.ai/code/session_012Vfz1NHWJbVtoDEWcE5tq6
2026-03-23 23:17:13 +00:00
715bef163c
Add stopgap ETA of 1 second when the shuttle has arrived at a stop
2025-11-21 11:33:22 -08:00
645fe1055b
Add createRedisClientForRepository method to deduplicate default Redis client in constructor
2025-11-20 16:41:14 -08:00
545eaef74a
Add implementation and test for leaving stop event
2025-11-19 11:31:13 -08:00
b8c3f17510
Add test for ETA clearing
2025-11-19 10:57:27 -08:00
47708d050e
Move duplicate shuttle declarations in tests to a "sample" shuttle generated by the setup function
2025-11-18 19:50:07 -08:00
f334054b5e
Add SHUTTLE_WILL_LEAVE_STOP event and upload payload names
2025-11-18 19:17:04 -08:00
34b2ab05d4
Rename properties in WillArriveAtStopPayload for more clarity
2025-11-18 19:14:29 -08:00
0798773bcb
Replicate the change in the in-memory version
2025-11-18 19:07:44 -08:00
a2f76703ea
Remove behavior of ETA clearing when shuttle is approaching stop
2025-11-18 19:07:06 -08:00
8621f10721
Switch the order of fallbacks (previous 2h first)
...
Data from the current day is more representative of current traffic conditions than the same data from a previous day.
2025-11-14 10:49:23 -08:00
f8e7670b3f
For data from last week and previous day, look back instead of looking forward
2025-11-14 10:40:37 -08:00
397eb2b588
Change one-hour windows to two hours
...
A set of shuttles may only make a complete set of trips in two hours, so this should capture more data when calculating ETAs.
2025-11-14 10:34:48 -08:00
2df8f389b3
Change the final fallback window to two hours
2025-11-13 20:23:14 -08:00
f9ed8f16ac
Bind methods and log errors for missing keys
2025-11-13 20:08:15 -08:00
d6ad90ee7a
Change SHUTTLE_WILL_ARRIVE_AT_STOP to return payload of last stop and current stop, to avoid data race
2025-11-13 18:52:13 -08:00
0cf2a4d2e7
Add logic to clear out previous ETAs
2025-11-13 18:35:20 -08:00
2fbc13202d
Apply the same changes to the in-memory repository
2025-11-13 18:02:10 -08:00
bf6a2e4667
Add recursive implementation of cascading ETA updates for multiple ordered stops
2025-11-13 17:38:53 -08:00
91584fc2ab
Extract fallback logic to a separate method
2025-11-13 17:19:37 -08:00
42c71815e6
Make the ETA assertion check for multiple ETA insertions
2025-11-13 17:13:43 -08:00
b5690d8983
Also implement the fallback logic in the in-memory repository
2025-11-13 16:52:39 -08:00
076f1fd1e4
Extract setup and assertion procedure into method for all three tests to use
2025-11-13 16:49:32 -08:00
71ac18cb8d
Add a similar test for previous hour
2025-11-13 16:43:53 -08:00
3f267be154
Add test for previous day fallback calculation
2025-11-13 16:41:51 -08:00
d302e8a2cb
Reorganize self-updating repository tests based on method name
2025-11-13 16:07:42 -08:00
7463cb27f1
Add proof-of-concept which also queries same time period yesterday, as well as last hour
2025-11-11 21:41:32 -08:00
1866224b5b
Prevent shuttle arriving at same stop from firing the SHUTTLE_WILL_ARRIVE_AT_STOP event
2025-11-11 21:22:39 -08:00
e03e962ab9
Implement remaining logic for RedisExternalSourceETARepository
2025-11-11 20:24:55 -08:00
6a31609960
Implement in-memory equivalents of both ETA repositories
2025-11-11 20:21:40 -08:00
7c5aeda4a9
Add timeouts for event emitters, and update reference behavior for the ETA entry test
2025-11-11 20:11:45 -08:00
ac81806b26
Swap implementations of two handler methods, and add reference implementation for adding travel time data
2025-11-11 19:51:31 -08:00
88a393c1ad
Update ETA add test to use setReferenceTime
2025-11-11 19:41:42 -08:00
5e8a3c84a6
Add previous reference implementation of getAverageTravelTimeSeconds and method bindings
2025-11-11 19:41:19 -08:00
4b37f3a121
Add a helper method for setting the "reference time" of the self-updating repo
2025-11-11 19:34:05 -08:00
e8f4e7b9ee
Add a base protected method for adding ETAs and emitting events
2025-11-11 19:33:52 -08:00
9af50ddfe9
Change the event name to SHUTTLE_WILL_ARRIVE_AT_STOP, and emit it before the stop is updated
2025-11-11 19:10:13 -08:00
b9fefcc6a9
Implement BaseRedisETARepository based on past implementation
2025-11-11 19:05:47 -08:00
04e8354e05
Implement BaseInMemoryETARepository based on previous implementation in shuttle repository
2025-11-11 19:03:16 -08:00
bc7ba7d507
Subscribe to shuttle events and add stub methods
2025-11-11 18:56:46 -08:00
6cf61d1cdb
Unify eventual getter implementations in a BaseRedisETARepository class
2025-11-11 18:47:13 -08:00
dac22da0b5
Update method call to addOrUpdateShuttle
2025-11-11 15:38:03 -08:00
6df4678acc
Add stub for in-memory self updating ETA repository
2025-11-11 15:14:03 -08:00
7a0e303080
Add stub for in-memory external source ETA repository
2025-11-11 14:59:24 -08:00
99999450b5
Remove clearAllData from BaseRedisRepository and update tests
2025-11-11 14:50:53 -08:00
01c55d52ec
Make BaseRedisRepository extend EventEmitter; make RedisShuttleRepository extend BaseRedisRepository
2025-11-11 12:31:32 -08:00
b6b79e1345
Migrate ETA-related tests over to the ETA repository tests
2025-11-11 12:27:10 -08:00
13bfc853e3
Add getAverageTravelTimeSeconds in SelfUpdatingETARepository definition
2025-11-11 12:26:45 -08:00
83e3414c8e
Add the tests back, for directly adding/removing ETAs
2025-11-11 12:08:02 -08:00
cb23379723
Add shuttleRepository injection to the constructor of RedisSelfUpdatingETARepository
2025-11-11 11:41:39 -08:00