mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-17 07:50:31 +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