Merge pull request #26 from brendan-ch/chore/setup-mock-data-loader

chore/setup-mock-data-loader
This commit is contained in:
2025-02-19 12:03:42 -08:00
committed by GitHub
5 changed files with 4387 additions and 18 deletions

View File

@@ -7,6 +7,7 @@ import { UnoptimizedInMemoryRepository } from "./repositories/UnoptimizedInMemor
import { TimedApiBasedRepositoryLoader } from "./loaders/TimedApiBasedRepositoryLoader";
import { NotificationService } from "./services/NotificationService";
import { configDotenv } from "dotenv";
import { loadTestData } from "./loaders/loadTestData";
configDotenv();
@@ -20,12 +21,17 @@ async function main() {
});
const repository = new UnoptimizedInMemoryRepository();
const repositoryDataUpdater = new TimedApiBasedRepositoryLoader(
repository
);
await repositoryDataUpdater.start();
const notificationService = new NotificationService(repository);
let notificationService: NotificationService;
if (process.argv.length > 2 && process.argv[2] == "integration-testing") {
await loadTestData(repository);
notificationService = new NotificationService(repository, false);
} else {
const repositoryDataUpdater = new TimedApiBasedRepositoryLoader(
repository
);
await repositoryDataUpdater.start();
notificationService = new NotificationService(repository);
}
notificationService.reloadAPNsTokenIfTimePassed();
const { url } = await startStandaloneServer(server, {

View File

@@ -1,5 +1,6 @@
import { GetterSetterRepository } from "../repositories/GetterSetterRepository";
import { IEntityWithId, IEta, IRoute, IShuttle, IStop, ISystem } from "../entities/entities";
import { RepositoryLoader } from "./RepositoryLoader";
export class ApiResponseError extends Error {
constructor(message: string) {
@@ -13,7 +14,7 @@ export class ApiResponseError extends Error {
* Passio Go API. Supports automatic pruning of all data types
* which inherit from `IEntityWithId`.
*/
export class ApiBasedRepositoryLoader {
export class ApiBasedRepositoryLoader implements RepositoryLoader {
supportedSystemIds = ["263"];
baseUrl = "https://passiogo.com/mapGetData.php";
@@ -382,4 +383,4 @@ export class ApiBasedRepositoryLoader {
}))
}
}
}
}

View File

@@ -0,0 +1,12 @@
export interface RepositoryLoader {
fetchAndUpdateSystemData(): Promise<void>;
fetchAndUpdateRouteDataForExistingSystemsInRepository(): Promise<void>;
fetchAndUpdateRouteDataForSystemId(systemId: string): Promise<void>;
fetchAndUpdateStopAndPolylineDataForRoutesInExistingSystemsInRepository(): Promise<void>;
fetchAndUpdateStopAndPolylineDataForRoutesWithSystemId(systemId: string): Promise<void>;
fetchAndUpdateShuttleDataForExistingSystemsInRepository(): Promise<void>;
fetchAndUpdateShuttleDataForSystemId(systemId: string): Promise<void>;
fetchAndUpdateEtaDataForExistingStopsForSystemsInRepository(): Promise<void>;
fetchAndUpdateEtaDataForExistingStopsForSystemId(systemId: string): Promise<void>;
fetchAndUpdateEtaDataForStopId(stopId: string): Promise<void>;
}

File diff suppressed because it is too large Load Diff

View File

@@ -27,7 +27,7 @@ export class NotificationService {
return this._lastRefreshedTimeMs;
}
constructor(private repository: GetterRepository) {
constructor(private repository: GetterRepository, private shouldActuallySendNotifications = true) {
this.etaSubscriberCallback = this.etaSubscriberCallback.bind(this);
this.reloadAPNsTokenIfTimePassed = this.reloadAPNsTokenIfTimePassed.bind(this);
this.lastReloadedTimeForAPNsIsTooRecent = this.lastReloadedTimeForAPNsIsTooRecent.bind(this);
@@ -81,6 +81,10 @@ export class NotificationService {
}
private async sendEtaNotificationImmediately(notificationData: ScheduledNotificationData): Promise<boolean> {
if (!this.shouldActuallySendNotifications) {
return true; // pretend that the notification sent
}
const { deviceId, shuttleId, stopId } = notificationData;
this.reloadAPNsTokenIfTimePassed();