mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-19 08:50:29 +00:00
Define a set of interfaces for the ETA repository
This commit is contained in:
37
src/repositories/shuttle/eta/ETAGetterRepository.ts
Normal file
37
src/repositories/shuttle/eta/ETAGetterRepository.ts
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import { EventEmitter } from "stream";
|
||||||
|
import { IEta } from "../../../entities/ShuttleRepositoryEntities";
|
||||||
|
|
||||||
|
// TODO: Remove these events in ShuttleGetterRepository
|
||||||
|
|
||||||
|
export const ETARepositoryEvent = {
|
||||||
|
ETA_UPDATED: "etaUpdated",
|
||||||
|
ETA_REMOVED: "etaRemoved",
|
||||||
|
ETA_DATA_CLEARED: "etaDataCleared",
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export type ETARepositoryEventName = typeof ETARepositoryEvent[keyof typeof ETARepositoryEvent];
|
||||||
|
|
||||||
|
export type EtaRemovedEventPayload = IEta;
|
||||||
|
export type EtaDataClearedEventPayload = IEta[];
|
||||||
|
|
||||||
|
export interface ETARepositoryEventPayloads {
|
||||||
|
[ETARepositoryEvent.ETA_UPDATED]: IEta;
|
||||||
|
[ETARepositoryEvent.ETA_REMOVED]: EtaRemovedEventPayload;
|
||||||
|
[ETARepositoryEvent.ETA_DATA_CLEARED]: EtaDataClearedEventPayload;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ETARepositoryEventListener<T extends ETARepositoryEventName> = (
|
||||||
|
payload: ETARepositoryEventPayloads[T],
|
||||||
|
) => void;
|
||||||
|
|
||||||
|
export interface ETAGetterRepository extends EventEmitter {
|
||||||
|
on<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this;
|
||||||
|
once<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this;
|
||||||
|
off<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this;
|
||||||
|
addListener<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this;
|
||||||
|
removeListener<T extends ETARepositoryEventName>(event: T, listener: ETARepositoryEventListener<T>): this;
|
||||||
|
|
||||||
|
getEtasForShuttleId(shuttleId: string): Promise<IEta[]>;
|
||||||
|
getEtasForStopId(stopId: string): Promise<IEta[]>;
|
||||||
|
getEtaForShuttleAndStopId(shuttleId: string, stopId: string): Promise<IEta | null>;
|
||||||
|
}
|
||||||
11
src/repositories/shuttle/eta/ETAGetterSetterRepository.ts
Normal file
11
src/repositories/shuttle/eta/ETAGetterSetterRepository.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import { IEta } from "../../../entities/ShuttleRepositoryEntities";
|
||||||
|
import { ETAGetterRepository } from "./ETAGetterRepository";
|
||||||
|
|
||||||
|
export interface ExternalSourceETARepository extends ETAGetterRepository {
|
||||||
|
/**
|
||||||
|
* Add or update an ETA from an external source (e.g., API or test data).
|
||||||
|
*/
|
||||||
|
addOrUpdateEtaFromExternalSource(eta: IEta): Promise<void>;
|
||||||
|
|
||||||
|
removeEtaIfExists(shuttleId: string, stopId: string): Promise<IEta | null>;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { ETAGetterRepository } from "./ETAGetterRepository";
|
||||||
|
|
||||||
|
export interface SelfUpdatingETARepository extends ETAGetterRepository {
|
||||||
|
/**
|
||||||
|
* Attach a event listener to the shuttle repository, listening to
|
||||||
|
* shuttle updates
|
||||||
|
*/
|
||||||
|
startListeningForUpdates(): void;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user