diff --git a/src/loaders/RepositoryDataLoader.ts b/src/loaders/RepositoryDataLoader.ts index 04e2c21..b9ec37b 100644 --- a/src/loaders/RepositoryDataLoader.ts +++ b/src/loaders/RepositoryDataLoader.ts @@ -1,5 +1,5 @@ import { GetterSetterRepository } from "../repositories/GetterSetterRepository"; -import { IRoute, IShuttle, IStop, ISystem } from "../entities/entities"; +import { IEta, IRoute, IShuttle, IStop, ISystem } from "../entities/entities"; const timeout = 10000; const systemIdsToSupport = ["263"]; @@ -201,27 +201,39 @@ export class RepositoryDataLoader { private async fetchAndUpdateEtaDataForExistingOrderedStops() { // TODO implement once I figure out how to associate ETA data with shuttles - // const systems = await this.repository.getSystems(); - // await Promise.all(systems.map(async (system: ISystem) => { - // const stops = await this.repository.getStopsBySystemId(system.id); - // - // await Promise.all(stops.map(async (stop: IStop) => { - // const orderedStops = await this.repository.getOrderedStopsByStopId(stop.id); - // - // await Promise.all(orderedStops.map(async (orderedStop) => { - // const params = { - // eta: "3", - // stopIds: stop.id, - // routeId: orderedStop.routeId, - // position: orderedStop.position, - // }; - // - // // How to get shuttle ID????????? - // // API doesn't provide it - // // I might be cooked - // })); - // })); - // })); + const systems = await this.repository.getSystems() + await Promise.all(systems.map(async (system: ISystem) => { + const stops = await this.repository.getStopsBySystemId(system.id); + await Promise.all(stops.map(async (stop) => { + const params = { + eta: "3", + stopIds: stop.id, + }; + + const query = new URLSearchParams(params).toString(); + const response = await fetch(`${baseUrl}?${query}`, { + method: "GET", + }); + const json = await response.json(); + + if (json.ETAs && json.ETAs[stop.id]) { + // Continue with the parsing + json.ETAs[stop.id].forEach((jsonEta: any) => { + // Update cache + const shuttleId: string = jsonEta.busId; + + const eta: IEta = { + secondsRemaining: jsonEta.secondsSpent, + shuttleId: `${shuttleId}`, + stopId: stop.id, + millisecondsSinceEpoch: Date.now(), + }; + + this.repository.addOrUpdateEta(eta); + }); + } + })); + })) } private async updateStopDataForSystemAndApiResponse(system: ISystem, json: any) { diff --git a/src/resolvers.ts b/src/resolvers.ts index e6dc137..29cf156 100644 --- a/src/resolvers.ts +++ b/src/resolvers.ts @@ -132,10 +132,10 @@ export const resolvers: Resolvers = { Shuttle: { eta: async (parent, args, contextValue, info) => { if (!args.forStopId) return null; - const etaForStopId = await contextValue.apiBasedRepository.getEtaForShuttleAndStopId(parent.id, args.forStopId); + const etaForStopId = await contextValue.repository.getEtaForShuttleAndStopId(parent.id, args.forStopId); if (etaForStopId === null) return null; - const stop = await contextValue.apiBasedRepository.getStopById(etaForStopId.stopId); + const stop = await contextValue.repository.getStopById(etaForStopId.stopId); if (stop === null) return null; return { @@ -149,14 +149,14 @@ export const resolvers: Resolvers = { }; }, etas: async (parent, args, contextValue, info) => { - const etasForShuttle = await contextValue.apiBasedRepository.getEtasForShuttleId(parent.id); + const etasForShuttle = await contextValue.repository.getEtasForShuttleId(parent.id); if (!etasForShuttle) return null; const computedEtas = await Promise.all(etasForShuttle.map(async ({ secondsRemaining, stopId, }): Promise => { - const stop = await contextValue.apiBasedRepository.getStopById(stopId); + const stop = await contextValue.repository.getStopById(stopId); if (stop === null) return null; return {