diff --git a/src/repositories/shuttle/eta/BaseInMemoryETARepository.ts b/src/repositories/shuttle/eta/BaseInMemoryETARepository.ts new file mode 100644 index 0000000..1a2b7cf --- /dev/null +++ b/src/repositories/shuttle/eta/BaseInMemoryETARepository.ts @@ -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 { + return this.etas.filter(eta => eta.shuttleId === shuttleId); + } + + async getEtasForStopId(stopId: string): Promise { + return this.etas.filter(eta => eta.stopId === stopId); + } + + async getEtaForShuttleAndStopId(shuttleId: string, stopId: string): Promise { + const eta = this.etas.find(eta => eta.stopId === stopId && eta.shuttleId === shuttleId); + return eta ?? null; + } + + // EventEmitter overrides for type safety + override on( + event: T, + listener: ETARepositoryEventListener, + ): this; + override on(event: string | symbol, listener: (...args: any[]) => void): this { + return super.on(event, listener); + } + + override once( + event: T, + listener: ETARepositoryEventListener, + ): this; + override once(event: string | symbol, listener: (...args: any[]) => void): this { + return super.once(event, listener); + } + + override off( + event: T, + listener: ETARepositoryEventListener, + ): this; + override off(event: string | symbol, listener: (...args: any[]) => void): this { + return super.off(event, listener); + } + + override addListener( + event: T, + listener: ETARepositoryEventListener, + ): this; + override addListener(event: string | symbol, listener: (...args: any[]) => void): this { + return super.addListener(event, listener); + } + + override removeListener( + event: T, + listener: ETARepositoryEventListener, + ): 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); + } +} diff --git a/src/repositories/shuttle/eta/InMemoryExternalSourceETARepository.ts b/src/repositories/shuttle/eta/InMemoryExternalSourceETARepository.ts index 9e6afa4..b769c12 100644 --- a/src/repositories/shuttle/eta/InMemoryExternalSourceETARepository.ts +++ b/src/repositories/shuttle/eta/InMemoryExternalSourceETARepository.ts @@ -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 { throw new Error("Method not implemented."); } + removeEtaIfExists(shuttleId: string, stopId: string): Promise { throw new Error("Method not implemented."); } - on(event: T, listener: ETARepositoryEventListener): this { - throw new Error("Method not implemented."); - } - once(event: T, listener: ETARepositoryEventListener): this { - throw new Error("Method not implemented."); - } - off(event: T, listener: ETARepositoryEventListener): this { - throw new Error("Method not implemented."); - } - addListener(event: T, listener: ETARepositoryEventListener): this { - throw new Error("Method not implemented."); - } - removeListener(event: T, listener: ETARepositoryEventListener): this { - throw new Error("Method not implemented."); - } - getEtasForShuttleId(shuttleId: string): Promise { - throw new Error("Method not implemented."); - } - getEtasForStopId(stopId: string): Promise { - throw new Error("Method not implemented."); - } - getEtaForShuttleAndStopId(shuttleId: string, stopId: string): Promise { - throw new Error("Method not implemented."); - } - removeAllListeners(eventName?: string | symbol | undefined): this { - throw new Error("Method not implemented."); - } } diff --git a/src/repositories/shuttle/eta/InMemorySelfUpdatingETARepository.ts b/src/repositories/shuttle/eta/InMemorySelfUpdatingETARepository.ts index ce0160b..de42361 100644 --- a/src/repositories/shuttle/eta/InMemorySelfUpdatingETARepository.ts +++ b/src/repositories/shuttle/eta/InMemorySelfUpdatingETARepository.ts @@ -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 { throw new Error("Method not implemented."); } + startListeningForUpdates(): void { throw new Error("Method not implemented."); } - on(event: T, listener: ETARepositoryEventListener): this { - throw new Error("Method not implemented."); - } - once(event: T, listener: ETARepositoryEventListener): this { - throw new Error("Method not implemented."); - } - off(event: T, listener: ETARepositoryEventListener): this { - throw new Error("Method not implemented."); - } - addListener(event: T, listener: ETARepositoryEventListener): this { - throw new Error("Method not implemented."); - } - removeListener(event: T, listener: ETARepositoryEventListener): this { - throw new Error("Method not implemented."); - } - getEtasForShuttleId(shuttleId: string): Promise { - throw new Error("Method not implemented."); - } - getEtasForStopId(stopId: string): Promise { - throw new Error("Method not implemented."); - } - getEtaForShuttleAndStopId(shuttleId: string, stopId: string): Promise { - throw new Error("Method not implemented."); - } - removeAllListeners(eventName?: string | symbol | undefined): this { - throw new Error("Method not implemented."); - } }