Implement BaseInMemoryETARepository based on previous implementation in shuttle repository

This commit is contained in:
2025-11-11 19:03:16 -08:00
parent bc7ba7d507
commit 04e8354e05
3 changed files with 71 additions and 61 deletions

View File

@@ -0,0 +1,65 @@
import { IEta } from "../../../entities/ShuttleRepositoryEntities";
import { ETAGetterRepository, ETARepositoryEventListener, ETARepositoryEventName } from "./ETAGetterRepository";
import EventEmitter from "node:events";
export abstract class BaseInMemoryETARepository extends EventEmitter implements ETAGetterRepository {
protected etas: IEta[] = [];
async getEtasForShuttleId(shuttleId: string): Promise<IEta[]> {
return this.etas.filter(eta => eta.shuttleId === shuttleId);
}
async getEtasForStopId(stopId: string): Promise<IEta[]> {
return this.etas.filter(eta => eta.stopId === stopId);
}
async getEtaForShuttleAndStopId(shuttleId: string, stopId: string): Promise<IEta | null> {
const eta = this.etas.find(eta => eta.stopId === stopId && eta.shuttleId === shuttleId);
return eta ?? null;
}
// EventEmitter overrides for type safety
override on<T extends ETARepositoryEventName>(
event: T,
listener: ETARepositoryEventListener<T>,
): this;
override on(event: string | symbol, listener: (...args: any[]) => void): this {
return super.on(event, listener);
}
override once<T extends ETARepositoryEventName>(
event: T,
listener: ETARepositoryEventListener<T>,
): this;
override once(event: string | symbol, listener: (...args: any[]) => void): this {
return super.once(event, listener);
}
override off<T extends ETARepositoryEventName>(
event: T,
listener: ETARepositoryEventListener<T>,
): this;
override off(event: string | symbol, listener: (...args: any[]) => void): this {
return super.off(event, listener);
}
override addListener<T extends ETARepositoryEventName>(
event: T,
listener: ETARepositoryEventListener<T>,
): this;
override addListener(event: string | symbol, listener: (...args: any[]) => void): this {
return super.addListener(event, listener);
}
override removeListener<T extends ETARepositoryEventName>(
event: T,
listener: ETARepositoryEventListener<T>,
): this;
override removeListener(event: string | symbol, listener: (...args: any[]) => void): this {
return super.removeListener(event, listener);
}
override removeAllListeners(eventName?: string | symbol): this {
return super.removeAllListeners(eventName);
}
}

View File

@@ -1,40 +1,13 @@
import { EventEmitter } from "stream";
import { IEta } from "../../../entities/ShuttleRepositoryEntities";
import { ETARepositoryEventName, ETARepositoryEventListener } from "./ETAGetterRepository";
import { ExternalSourceETARepository } from "./ExternalSourceETARepository";
import { BaseInMemoryETARepository } from "./BaseInMemoryETARepository";
export class InMemoryExternalSourceETARepository extends EventEmitter implements ExternalSourceETARepository {
export class InMemoryExternalSourceETARepository extends BaseInMemoryETARepository implements ExternalSourceETARepository {
addOrUpdateEtaFromExternalSource(eta: IEta): Promise<void> {
throw new Error("Method not implemented.");
}
removeEtaIfExists(shuttleId: string, stopId: string): Promise<IEta | null> {
throw new Error("Method not implemented.");
}
on<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this {
throw new Error("Method not implemented.");
}
once<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this {
throw new Error("Method not implemented.");
}
off<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this {
throw new Error("Method not implemented.");
}
addListener<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this {
throw new Error("Method not implemented.");
}
removeListener<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this {
throw new Error("Method not implemented.");
}
getEtasForShuttleId(shuttleId: string): Promise<IEta[]> {
throw new Error("Method not implemented.");
}
getEtasForStopId(stopId: string): Promise<IEta[]> {
throw new Error("Method not implemented.");
}
getEtaForShuttleAndStopId(shuttleId: string, stopId: string): Promise<IEta | null> {
throw new Error("Method not implemented.");
}
removeAllListeners(eventName?: string | symbol | undefined): this {
throw new Error("Method not implemented.");
}
}

View File

@@ -1,10 +1,8 @@
import { IEta } from "../../../entities/ShuttleRepositoryEntities";
import { ETARepositoryEventName, ETARepositoryEventListener } from "./ETAGetterRepository";
import { SelfUpdatingETARepository } from "./SelfUpdatingETARepository";
import { ShuttleGetterRepository, ShuttleTravelTimeDataIdentifier, ShuttleTravelTimeDateFilterArguments } from "../ShuttleGetterRepository";
import { EventEmitter } from "stream";
import { BaseInMemoryETARepository } from "./BaseInMemoryETARepository";
export class InMemorySelfUpdatingETARepository extends EventEmitter implements SelfUpdatingETARepository {
export class InMemorySelfUpdatingETARepository extends BaseInMemoryETARepository implements SelfUpdatingETARepository {
constructor(
readonly shuttleRepository: ShuttleGetterRepository
) {
@@ -14,34 +12,8 @@ export class InMemorySelfUpdatingETARepository extends EventEmitter implements S
getAverageTravelTimeSeconds(identifier: ShuttleTravelTimeDataIdentifier, dateFilter: ShuttleTravelTimeDateFilterArguments): Promise<number | undefined> {
throw new Error("Method not implemented.");
}
startListeningForUpdates(): void {
throw new Error("Method not implemented.");
}
on<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this {
throw new Error("Method not implemented.");
}
once<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this {
throw new Error("Method not implemented.");
}
off<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this {
throw new Error("Method not implemented.");
}
addListener<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this {
throw new Error("Method not implemented.");
}
removeListener<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this {
throw new Error("Method not implemented.");
}
getEtasForShuttleId(shuttleId: string): Promise<IEta[]> {
throw new Error("Method not implemented.");
}
getEtasForStopId(stopId: string): Promise<IEta[]> {
throw new Error("Method not implemented.");
}
getEtaForShuttleAndStopId(shuttleId: string, stopId: string): Promise<IEta | null> {
throw new Error("Method not implemented.");
}
removeAllListeners(eventName?: string | symbol | undefined): this {
throw new Error("Method not implemented.");
}
}