From c67ab7b6da8b24d6ded2fe66582cf2eabb7294a9 Mon Sep 17 00:00:00 2001 From: Brendan Chen Date: Mon, 23 Dec 2024 12:53:31 -0800 Subject: [PATCH] add method to fetch and update shuttle data --- src/repositoryDataLoader.ts | 53 ++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/src/repositoryDataLoader.ts b/src/repositoryDataLoader.ts index 3bac63f..31e3329 100644 --- a/src/repositoryDataLoader.ts +++ b/src/repositoryDataLoader.ts @@ -1,7 +1,7 @@ -import { IRoute, ISystem, Repository } from "./repository"; +import { IRoute, IShuttle, ISystem, Repository } from "./repository"; const timeout = 10000; -const systemIdsToSupport = ["263"] +const systemIdsToSupport = ["263", "3215"]; const baseUrl = "https://passiogo.com/mapGetData.php"; export class RepositoryDataLoader { @@ -31,8 +31,8 @@ export class RepositoryDataLoader { try { await this.fetchAndUpdateSystemData(); await this.fetchAndUpdateRouteDataForExistingSystems(); - await this.fetchAndUpdateStopAndOrderedStopData(); - await this.fetchAndUpdateShuttleData(); + await this.fetchAndUpdateStopAndPolylineDataForRoutes(); + await this.fetchAndUpdateShuttleDataForSystems(); await this.fetchAndUpdateEtaData(); } catch (e) { console.error(e); @@ -103,12 +103,53 @@ export class RepositoryDataLoader { })); } - private async fetchAndUpdateStopAndOrderedStopData() { + private async fetchAndUpdateStopAndPolylineDataForRoutes() { } - private async fetchAndUpdateShuttleData() { + private async fetchAndUpdateShuttleDataForSystems() { + const systems = await this.repository.getSystems(); + await Promise.all(systems.map(async (system: ISystem) => { + const params = { + getBuses: "2" + }; + const formDataJsonObject = { + "s0": system.id, + "sA": "1" + }; + + const formData = new FormData(); + formData.set("json", JSON.stringify(formDataJsonObject)); + + const query = new URLSearchParams(params).toString(); + const response = await fetch(`${baseUrl}?${query}`, { + method: "POST", + body: formData, + }); + const json = await response.json(); + + if (json.buses && json.buses["-1"] === undefined) { + const jsonBuses = Object.values(json.buses).map((busesArr: any) => { + return busesArr[0]; + }); + + await Promise.all(jsonBuses.map(async (jsonBus: any) => { + const constructedShuttle: IShuttle = { + name: jsonBus.bus, + coordinates: { + latitude: parseFloat(jsonBus.latitude), + longitude: parseFloat(jsonBus.longitude), + }, + routeId: jsonBus.routeId, + systemId: system.id, + id: `${jsonBus.busId}` + } + + await this.repository.addOrUpdateShuttle(constructedShuttle); + })) + } + })); } private async fetchAndUpdateEtaData() {