Pass down the new arguments into the shuttle repositories

This commit is contained in:
2025-11-20 16:47:50 -08:00
parent 645fe1055b
commit a9db9b5d5c
3 changed files with 34 additions and 7 deletions

View File

@@ -23,6 +23,7 @@ import { RedisExternalSourceETARepository } from "../repositories/shuttle/eta/Re
import { InMemorySelfUpdatingETARepository } from "../repositories/shuttle/eta/InMemorySelfUpdatingETARepository"; import { InMemorySelfUpdatingETARepository } from "../repositories/shuttle/eta/InMemorySelfUpdatingETARepository";
import { BaseRedisETARepository } from "../repositories/shuttle/eta/BaseRedisETARepository"; import { BaseRedisETARepository } from "../repositories/shuttle/eta/BaseRedisETARepository";
import { BaseInMemoryETARepository } from "../repositories/shuttle/eta/BaseInMemoryETARepository"; import { BaseInMemoryETARepository } from "../repositories/shuttle/eta/BaseInMemoryETARepository";
import createRedisClientForRepository from "../helpers/createRedisClientForRepository";
export interface InterchangeSystemBuilderArguments { export interface InterchangeSystemBuilderArguments {
name: string; name: string;
@@ -112,7 +113,11 @@ export class InterchangeSystem {
} }
private static async buildRedisShuttleLoaderAndRepositories(args: InterchangeSystemBuilderArguments) { private static async buildRedisShuttleLoaderAndRepositories(args: InterchangeSystemBuilderArguments) {
const shuttleRepository = new RedisShuttleRepository(); const shuttleRepository = new RedisShuttleRepository(
createRedisClientForRepository(),
args.shuttleStopArrivalDegreeDelta,
args.shuttleStopNearbyDegreeDelta,
);
await shuttleRepository.connect(); await shuttleRepository.connect();
let etaRepository: BaseRedisETARepository; let etaRepository: BaseRedisETARepository;
@@ -261,7 +266,10 @@ export class InterchangeSystem {
} }
private static buildInMemoryShuttleLoaderAndRepositories(args: InterchangeSystemBuilderArguments) { private static buildInMemoryShuttleLoaderAndRepositories(args: InterchangeSystemBuilderArguments) {
const shuttleRepository = new UnoptimizedInMemoryShuttleRepository(); const shuttleRepository = new UnoptimizedInMemoryShuttleRepository(
args.shuttleStopArrivalDegreeDelta,
args.shuttleStopNearbyDegreeDelta,
);
let etaRepository: BaseInMemoryETARepository; let etaRepository: BaseInMemoryETARepository;
let shuttleDataLoader: ApiBasedShuttleRepositoryLoader; let shuttleDataLoader: ApiBasedShuttleRepositoryLoader;

View File

@@ -10,8 +10,18 @@ import {
ShuttleTravelTimeDateFilterArguments ShuttleTravelTimeDateFilterArguments
} from "./ShuttleGetterRepository"; } from "./ShuttleGetterRepository";
import { BaseRedisRepository } from "../BaseRedisRepository"; import { BaseRedisRepository } from "../BaseRedisRepository";
import { RedisClientType } from "redis";
import createRedisClientForRepository from "../../helpers/createRedisClientForRepository";
export class RedisShuttleRepository extends BaseRedisRepository implements ShuttleGetterSetterRepository { export class RedisShuttleRepository extends BaseRedisRepository implements ShuttleGetterSetterRepository {
constructor(
redisClient: RedisClientType = createRedisClientForRepository(),
readonly shuttleStopArrivalDegreeDelta: number = 0.001,
readonly shuttleStopNearbyDegreeDelta: number = 0.003,
) {
super(redisClient);
}
get isReady() { get isReady() {
return this.redisClient.isReady; return this.redisClient.isReady;
} }
@@ -481,20 +491,21 @@ export class RedisShuttleRepository extends BaseRedisRepository implements Shutt
* is on the shuttle's route. * is on the shuttle's route.
* *
* @param shuttle * @param shuttle
* @param delta * @param degreeDelta
* @returns * @returns
*/ */
public async getArrivedStopIfExists( public async getArrivedStopIfExists(
shuttle: IShuttle, shuttle: IShuttle,
delta = 0.001,
): Promise<IStop | undefined> { ): Promise<IStop | undefined> {
const degreeDelta = this.shuttleStopArrivalDegreeDelta;
const lastStop = await this.getShuttleLastStopArrival(shuttle.id); const lastStop = await this.getShuttleLastStopArrival(shuttle.id);
if (lastStop) { if (lastStop) {
const lastOrderedStop = await this.getOrderedStopByRouteAndStopId(shuttle.routeId, lastStop.stopId); const lastOrderedStop = await this.getOrderedStopByRouteAndStopId(shuttle.routeId, lastStop.stopId);
const orderedStopAfter = lastOrderedStop?.nextStop; const orderedStopAfter = lastOrderedStop?.nextStop;
if (orderedStopAfter) { if (orderedStopAfter) {
const stopAfter = await this.getStopById(orderedStopAfter.stopId); const stopAfter = await this.getStopById(orderedStopAfter.stopId);
if (stopAfter && shuttleHasArrivedAtStop(shuttle, stopAfter, delta)) { if (stopAfter && shuttleHasArrivedAtStop(shuttle, stopAfter, degreeDelta)) {
return stopAfter; return stopAfter;
} }
} }
@@ -503,7 +514,7 @@ export class RedisShuttleRepository extends BaseRedisRepository implements Shutt
for (const orderedStop of orderedStops) { for (const orderedStop of orderedStops) {
const stop = await this.getStopById(orderedStop.stopId); const stop = await this.getStopById(orderedStop.stopId);
if (stop != null && shuttleHasArrivedAtStop(shuttle, stop, delta)) { if (stop != null && shuttleHasArrivedAtStop(shuttle, stop, degreeDelta)) {
return stop; return stop;
} }
} }

View File

@@ -20,6 +20,14 @@ import {
export class UnoptimizedInMemoryShuttleRepository export class UnoptimizedInMemoryShuttleRepository
extends EventEmitter extends EventEmitter
implements ShuttleGetterSetterRepository { implements ShuttleGetterSetterRepository {
constructor(
readonly shuttleStopArrivalDegreeDelta: number = 0.001,
readonly shuttleStopNearbyDegreeDelta: number = 0.003,
) {
super()
}
public override on<T extends ShuttleRepositoryEventName>( public override on<T extends ShuttleRepositoryEventName>(
event: T, event: T,
listener: ShuttleRepositoryEventListener<T>, listener: ShuttleRepositoryEventListener<T>,
@@ -252,8 +260,8 @@ export class UnoptimizedInMemoryShuttleRepository
public async getArrivedStopIfExists( public async getArrivedStopIfExists(
shuttle: IShuttle, shuttle: IShuttle,
delta = 0.001,
): Promise<IStop | undefined> { ): Promise<IStop | undefined> {
const delta = this.shuttleStopArrivalDegreeDelta;
const orderedStops = await this.getOrderedStopsByRouteId(shuttle.routeId); const orderedStops = await this.getOrderedStopsByRouteId(shuttle.routeId);
for (const orderedStop of orderedStops) { for (const orderedStop of orderedStops) {