diff --git a/src/repositories/shuttle/RedisShuttleRepository.ts b/src/repositories/shuttle/RedisShuttleRepository.ts index d343b4d..3cd452b 100644 --- a/src/repositories/shuttle/RedisShuttleRepository.ts +++ b/src/repositories/shuttle/RedisShuttleRepository.ts @@ -395,7 +395,11 @@ export class RedisShuttleRepository extends BaseRedisRepository implements Shutt ) { const arrivedStop = await this.getArrivedStopIfExists(shuttle); - if (arrivedStop != undefined) { + if (arrivedStop) { + // stop if same stop + const lastStop = await this.getShuttleLastStopArrival(shuttle.id); + if (lastStop?.stopId === arrivedStop.id) return; + const shuttleArrival = { stopId: arrivedStop.id, timestamp: new Date(travelTimeTimestamp), diff --git a/src/repositories/shuttle/eta/InMemorySelfUpdatingETARepository.ts b/src/repositories/shuttle/eta/InMemorySelfUpdatingETARepository.ts index 4f0f6e3..be2cea9 100644 --- a/src/repositories/shuttle/eta/InMemorySelfUpdatingETARepository.ts +++ b/src/repositories/shuttle/eta/InMemorySelfUpdatingETARepository.ts @@ -93,6 +93,9 @@ export class InMemorySelfUpdatingETARepository extends BaseInMemoryETARepository private async handleShuttleWillArriveAtStop(shuttleArrival: ShuttleStopArrival): Promise { const lastStopTimestamp = await this.shuttleRepository.getShuttleLastStopArrival(shuttleArrival.shuttleId); if (lastStopTimestamp) { + // disallow cases where this gets triggered multiple times + if (lastStopTimestamp.stopId === shuttleArrival.stopId) return; + const shuttle = await this.shuttleRepository.getShuttleById(lastStopTimestamp.shuttleId); if (!shuttle) return; diff --git a/src/repositories/shuttle/eta/RedisSelfUpdatingETARepository.ts b/src/repositories/shuttle/eta/RedisSelfUpdatingETARepository.ts index c0384d9..50af4a3 100644 --- a/src/repositories/shuttle/eta/RedisSelfUpdatingETARepository.ts +++ b/src/repositories/shuttle/eta/RedisSelfUpdatingETARepository.ts @@ -119,6 +119,9 @@ export class RedisSelfUpdatingETARepository extends BaseRedisETARepository imple ) { const lastStopTimestamp = await this.shuttleRepository.getShuttleLastStopArrival(shuttleArrival.shuttleId); if (lastStopTimestamp) { + // disallow cases where this gets triggered multiple times + if (lastStopTimestamp.stopId === shuttleArrival.stopId) return; + const shuttle = await this.shuttleRepository.getShuttleById(lastStopTimestamp.shuttleId); if (!shuttle) return;