mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-17 07:50:31 +00:00
Add logic to clear out previous ETAs
This commit is contained in:
@@ -2,6 +2,7 @@ import { SelfUpdatingETARepository } from "./SelfUpdatingETARepository";
|
|||||||
import { ShuttleGetterRepository, ShuttleRepositoryEvent, ShuttleStopArrival, ShuttleTravelTimeDataIdentifier, ShuttleTravelTimeDateFilterArguments } from "../ShuttleGetterRepository";
|
import { ShuttleGetterRepository, ShuttleRepositoryEvent, ShuttleStopArrival, ShuttleTravelTimeDataIdentifier, ShuttleTravelTimeDateFilterArguments } from "../ShuttleGetterRepository";
|
||||||
import { BaseInMemoryETARepository } from "./BaseInMemoryETARepository";
|
import { BaseInMemoryETARepository } from "./BaseInMemoryETARepository";
|
||||||
import { IOrderedStop, IShuttle } from "../../../entities/ShuttleRepositoryEntities";
|
import { IOrderedStop, IShuttle } from "../../../entities/ShuttleRepositoryEntities";
|
||||||
|
import { ETARepositoryEvent } from "./ETAGetterRepository";
|
||||||
|
|
||||||
export class InMemorySelfUpdatingETARepository extends BaseInMemoryETARepository implements SelfUpdatingETARepository {
|
export class InMemorySelfUpdatingETARepository extends BaseInMemoryETARepository implements SelfUpdatingETARepository {
|
||||||
private referenceTime: Date | null = null;
|
private referenceTime: Date | null = null;
|
||||||
@@ -155,6 +156,11 @@ export class InMemorySelfUpdatingETARepository extends BaseInMemoryETARepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async handleShuttleWillArriveAtStop(shuttleArrival: ShuttleStopArrival): Promise<void> {
|
private async handleShuttleWillArriveAtStop(shuttleArrival: ShuttleStopArrival): Promise<void> {
|
||||||
|
const etas = await this.getEtasForShuttleId(shuttleArrival.shuttleId);
|
||||||
|
for (const eta of etas) {
|
||||||
|
await this.removeEtaIfExists(eta.shuttleId, eta.stopId);
|
||||||
|
}
|
||||||
|
|
||||||
const lastStopTimestamp = await this.shuttleRepository.getShuttleLastStopArrival(shuttleArrival.shuttleId);
|
const lastStopTimestamp = await this.shuttleRepository.getShuttleLastStopArrival(shuttleArrival.shuttleId);
|
||||||
if (lastStopTimestamp) {
|
if (lastStopTimestamp) {
|
||||||
// disallow cases where this gets triggered multiple times
|
// disallow cases where this gets triggered multiple times
|
||||||
@@ -182,4 +188,16 @@ export class InMemorySelfUpdatingETARepository extends BaseInMemoryETARepository
|
|||||||
dataPoints.push({ timestamp, seconds: travelTimeSeconds });
|
dataPoints.push({ timestamp, seconds: travelTimeSeconds });
|
||||||
this.travelTimeData.set(key, dataPoints);
|
this.travelTimeData.set(key, dataPoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async removeEtaIfExists(shuttleId: string, stopId: string) {
|
||||||
|
const index = this.etas.findIndex((e) => e.stopId === stopId && e.shuttleId === shuttleId);
|
||||||
|
if (index === -1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const removedEta = this.etas[index];
|
||||||
|
this.etas.splice(index, 1);
|
||||||
|
this.emit(ETARepositoryEvent.ETA_REMOVED, removedEta);
|
||||||
|
return removedEta;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ import { BaseRedisETARepository } from "./BaseRedisETARepository";
|
|||||||
import { createClient, RedisClientType } from "redis";
|
import { createClient, RedisClientType } from "redis";
|
||||||
import { ShuttleGetterRepository, ShuttleRepositoryEvent, ShuttleStopArrival, ShuttleTravelTimeDataIdentifier, ShuttleTravelTimeDateFilterArguments } from "../ShuttleGetterRepository";
|
import { ShuttleGetterRepository, ShuttleRepositoryEvent, ShuttleStopArrival, ShuttleTravelTimeDataIdentifier, ShuttleTravelTimeDateFilterArguments } from "../ShuttleGetterRepository";
|
||||||
import { REDIS_RECONNECT_INTERVAL } from "../../../environment";
|
import { REDIS_RECONNECT_INTERVAL } from "../../../environment";
|
||||||
import { IOrderedStop, IShuttle } from "../../../entities/ShuttleRepositoryEntities";
|
import { IEta, IOrderedStop, IShuttle } from "../../../entities/ShuttleRepositoryEntities";
|
||||||
|
import { ETARepositoryEvent } from "./ETAGetterRepository";
|
||||||
|
|
||||||
export class RedisSelfUpdatingETARepository extends BaseRedisETARepository implements SelfUpdatingETARepository {
|
export class RedisSelfUpdatingETARepository extends BaseRedisETARepository implements SelfUpdatingETARepository {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -176,6 +177,11 @@ export class RedisSelfUpdatingETARepository extends BaseRedisETARepository imple
|
|||||||
private async handleShuttleWillArriveAtStop(
|
private async handleShuttleWillArriveAtStop(
|
||||||
shuttleArrival: ShuttleStopArrival,
|
shuttleArrival: ShuttleStopArrival,
|
||||||
) {
|
) {
|
||||||
|
const etas = await this.getEtasForShuttleId(shuttleArrival.shuttleId);
|
||||||
|
for (const eta of etas) {
|
||||||
|
await this.removeEtaIfExists(eta.shuttleId, eta.stopId);
|
||||||
|
}
|
||||||
|
|
||||||
const lastStopTimestamp = await this.shuttleRepository.getShuttleLastStopArrival(shuttleArrival.shuttleId);
|
const lastStopTimestamp = await this.shuttleRepository.getShuttleLastStopArrival(shuttleArrival.shuttleId);
|
||||||
if (lastStopTimestamp) {
|
if (lastStopTimestamp) {
|
||||||
// disallow cases where this gets triggered multiple times
|
// disallow cases where this gets triggered multiple times
|
||||||
@@ -265,4 +271,15 @@ export class RedisSelfUpdatingETARepository extends BaseRedisETARepository imple
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async removeEtaIfExists(shuttleId: string, stopId: string): Promise<IEta | null> {
|
||||||
|
const existingEta = await this.getEtaForShuttleAndStopId(shuttleId, stopId);
|
||||||
|
if (existingEta === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const key = this.createEtaKey(shuttleId, stopId);
|
||||||
|
await this.redisClient.del(key);
|
||||||
|
this.emit(ETARepositoryEvent.ETA_REMOVED, existingEta);
|
||||||
|
return existingEta;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user