From 25f2a8c4581e20b8876644ef92fdf62a6fc1269b Mon Sep 17 00:00:00 2001 From: Brendan Chen Date: Mon, 7 Apr 2025 13:26:19 -0700 Subject: [PATCH] differentiate between passio system ID and internal ID in loader class --- src/entities/InterchangeSystem.ts | 12 ++++++++-- .../ApiBasedShuttleRepositoryLoader.ts | 23 ++++++++++--------- .../TimedApiBasedShuttleRepositoryLoader.ts | 5 ++-- ...iBasedShuttleRepositoryLoaderTests.test.ts | 8 +++---- ...iBasedShuttleRepositoryLoaderTests.test.ts | 6 ++++- 5 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/entities/InterchangeSystem.ts b/src/entities/InterchangeSystem.ts index efe30cd..abd045f 100644 --- a/src/entities/InterchangeSystem.ts +++ b/src/entities/InterchangeSystem.ts @@ -43,7 +43,11 @@ export class InterchangeSystem { args: InterchangeSystemBuilderArguments, ) { const shuttleRepository = new UnoptimizedInMemoryShuttleRepository(); - const shuttleDataLoader = new TimedApiBasedShuttleRepositoryLoader(args.passioSystemId, shuttleRepository); + const shuttleDataLoader = new TimedApiBasedShuttleRepositoryLoader( + args.passioSystemId, + args.id, + shuttleRepository + ); await shuttleDataLoader.start(); const notificationRepository = new RedisNotificationRepository(); @@ -75,7 +79,11 @@ export class InterchangeSystem { args: InterchangeSystemBuilderArguments, ) { const shuttleRepository = new UnoptimizedInMemoryShuttleRepository(); - const shuttleDataLoader = new ApiBasedShuttleRepositoryLoader(args.passioSystemId, shuttleRepository); + const shuttleDataLoader = new ApiBasedShuttleRepositoryLoader( + args.passioSystemId, + args.id, + shuttleRepository + ); const notificationRepository = new InMemoryNotificationRepository(); const notificationScheduler = new ETANotificationScheduler( diff --git a/src/loaders/ApiBasedShuttleRepositoryLoader.ts b/src/loaders/ApiBasedShuttleRepositoryLoader.ts index 5d6e952..278985e 100644 --- a/src/loaders/ApiBasedShuttleRepositoryLoader.ts +++ b/src/loaders/ApiBasedShuttleRepositoryLoader.ts @@ -18,7 +18,8 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader baseUrl = "https://passiogo.com/mapGetData.php"; constructor( - public systemId: string, + public passioSystemId: string, + public systemIdForConstructedData: string, public repository: ShuttleGetterSetterRepository, ) { } @@ -33,7 +34,7 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader } public async fetchAndUpdateRouteDataForSystem() { - const systemId = this.systemId; + const systemId = this.passioSystemId; const routeIdsToPrune = await this.constructExistingEntityIdSet(async () => { return await this.repository.getRoutesBySystemId(systemId); }); @@ -65,7 +66,7 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader color: jsonRoute.color, id: jsonRoute.myid, polylineCoordinates: [], - systemId: systemId, + systemId: this.systemIdForConstructedData, }; await this.repository.addOrUpdateRoute(constructedRoute); @@ -83,7 +84,7 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader } public async fetchAndUpdateStopAndPolylineDataForRoutesInSystem() { - const systemId = this.systemId; + const systemId = this.passioSystemId; // Fetch from the API // Pass JSON output into two different methods to update repository @@ -124,7 +125,7 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader } public async fetchAndUpdateShuttleDataForSystem() { - const systemId = this.systemId; + const systemId = this.passioSystemId; const shuttleIdsToPrune = await this.constructExistingEntityIdSet(async () => { return await this.repository.getShuttlesBySystemId(systemId); }); @@ -163,7 +164,7 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader longitude: parseFloat(jsonBus.longitude), }, routeId: jsonBus.routeId, - systemId: systemId, + systemId: this.systemIdForConstructedData, id: `${jsonBus.busId}`, orientationInDegrees: parseFloat(jsonBus.calculatedCourse) } @@ -183,7 +184,7 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader } public async fetchAndUpdateEtaDataForExistingStopsForSystem() { - const stops = await this.repository.getStopsBySystemId(this.systemId); + const stops = await this.repository.getStopsBySystemId(this.passioSystemId); await Promise.all(stops.map(async (stop) => { let stopId = stop.id; await this.fetchAndUpdateEtaDataForStopId(stopId); @@ -215,7 +216,7 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader shuttleId: `${shuttleId}`, stopId: stopId, millisecondsSinceEpoch: Date.now(), - systemId: this.systemId, + systemId: this.systemIdForConstructedData, }; this.repository.addOrUpdateEta(eta); @@ -273,7 +274,7 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader routeId, stopId, position: index + 1, - systemId: this.systemId, + systemId: this.systemIdForConstructedData, }; } @@ -282,7 +283,7 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader routeId, stopId: jsonOrderedStopData[index - 1][1], position: index, - systemId: this.systemId, + systemId: this.systemIdForConstructedData, }; } if (index < jsonOrderedStopData.length - 1) { @@ -290,7 +291,7 @@ export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader routeId, stopId: jsonOrderedStopData[index + 1][1], position: index + 2, - systemId: this.systemId, + systemId: this.systemIdForConstructedData, }; } diff --git a/src/loaders/TimedApiBasedShuttleRepositoryLoader.ts b/src/loaders/TimedApiBasedShuttleRepositoryLoader.ts index 151c218..15a7d59 100644 --- a/src/loaders/TimedApiBasedShuttleRepositoryLoader.ts +++ b/src/loaders/TimedApiBasedShuttleRepositoryLoader.ts @@ -22,10 +22,11 @@ export class TimedApiBasedShuttleRepositoryLoader extends ApiBasedShuttleReposit readonly timeout = 10000; constructor( - public systemId: string, + public passioSystemId: string, + public systemIdForConstructedData: string, repository: ShuttleGetterSetterRepository, ) { - super(systemId, repository); + super(passioSystemId, systemIdForConstructedData, repository); this.startFetchDataAndUpdate = this.startFetchDataAndUpdate.bind(this); } diff --git a/test/loaders/ApiBasedShuttleRepositoryLoaderTests.test.ts b/test/loaders/ApiBasedShuttleRepositoryLoaderTests.test.ts index 7a81d2a..3392428 100644 --- a/test/loaders/ApiBasedShuttleRepositoryLoaderTests.test.ts +++ b/test/loaders/ApiBasedShuttleRepositoryLoaderTests.test.ts @@ -1,13 +1,11 @@ -import { beforeEach, describe, expect, it, jest, test } from "@jest/globals"; +import { beforeEach, describe, expect, it, jest } from "@jest/globals"; import { ApiBasedShuttleRepositoryLoader, ApiResponseError } from "../../src/loaders/ApiBasedShuttleRepositoryLoader"; import { UnoptimizedInMemoryShuttleRepository } from "../../src/repositories/UnoptimizedInMemoryShuttleRepository"; -import { fetchSystemDataSuccessfulResponse } from "../jsonSnapshots/fetchSystemData/fetchSystemDataSuccessfulResponse"; -import { fetchSystemDataFailedResponse } from "../jsonSnapshots/fetchSystemData/fetchSystemDataFailedResponse"; import { fetchRouteDataSuccessfulResponse } from "../jsonSnapshots/fetchRouteData/fetchRouteDataSuccessfulResponse"; import { fetchStopAndPolylineDataSuccessfulResponse } from "../jsonSnapshots/fetchStopAndPolylineData/fetchStopAndPolylineDataSuccessfulResponse"; -import { generateMockRoutes, generateMockShuttles, generateMockStops, generateMockPassioSystems } from "../testHelpers/mockDataGenerators"; +import { generateMockRoutes, generateMockShuttles, generateMockStops } from "../testHelpers/mockDataGenerators"; import { fetchShuttleDataSuccessfulResponse } from "../jsonSnapshots/fetchShuttleData/fetchShuttleDataSuccessfulResponse"; @@ -26,7 +24,7 @@ describe("ApiBasedRepositoryLoader", () => { let loader: ApiBasedShuttleRepositoryLoader; beforeEach(() => { - loader = new ApiBasedShuttleRepositoryLoader("263", new UnoptimizedInMemoryShuttleRepository()); + loader = new ApiBasedShuttleRepositoryLoader("263", "1", new UnoptimizedInMemoryShuttleRepository()); resetGlobalFetchMockJson(); }); diff --git a/test/loaders/TimedApiBasedShuttleRepositoryLoaderTests.test.ts b/test/loaders/TimedApiBasedShuttleRepositoryLoaderTests.test.ts index 0ee8537..80a8c4d 100644 --- a/test/loaders/TimedApiBasedShuttleRepositoryLoaderTests.test.ts +++ b/test/loaders/TimedApiBasedShuttleRepositoryLoaderTests.test.ts @@ -15,7 +15,11 @@ describe("TimedApiBasedRepositoryLoader", () => { beforeEach(() => { resetGlobalFetchMockJson(); - loader = new TimedApiBasedShuttleRepositoryLoader("1", new UnoptimizedInMemoryShuttleRepository()); + loader = new TimedApiBasedShuttleRepositoryLoader( + "1", + "1", + new UnoptimizedInMemoryShuttleRepository() + ); spies = { fetchAndUpdateRouteDataForSystem: jest.spyOn(loader, 'fetchAndUpdateRouteDataForSystem'),