mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-17 07:50:31 +00:00
add implementations for data types with id
This commit is contained in:
@@ -54,9 +54,7 @@ export class ApiBasedRepositoryLoader {
|
|||||||
};
|
};
|
||||||
|
|
||||||
await this.repository.addOrUpdateSystem(constructedSystem);
|
await this.repository.addOrUpdateSystem(constructedSystem);
|
||||||
if (systemIds.has(constructedSystem.id)) {
|
systemIds.delete(constructedSystem.id);
|
||||||
systemIds.delete(constructedSystem.id);
|
|
||||||
}
|
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
throw new Error("Received JSON object does not contain `all` field")
|
throw new Error("Received JSON object does not contain `all` field")
|
||||||
@@ -79,6 +77,10 @@ export class ApiBasedRepositoryLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async fetchAndUpdateRouteDataForSystemId(systemId: string) {
|
public async fetchAndUpdateRouteDataForSystemId(systemId: string) {
|
||||||
|
const routeIdsToPrune = await this.constructExistingEntityIdSet(async () => {
|
||||||
|
return await this.repository.getRoutesBySystemId(systemId);
|
||||||
|
});
|
||||||
|
|
||||||
const params = {
|
const params = {
|
||||||
getRoutes: "2",
|
getRoutes: "2",
|
||||||
};
|
};
|
||||||
@@ -110,8 +112,14 @@ export class ApiBasedRepositoryLoader {
|
|||||||
};
|
};
|
||||||
|
|
||||||
await this.repository.addOrUpdateRoute(constructedRoute);
|
await this.repository.addOrUpdateRoute(constructedRoute);
|
||||||
|
|
||||||
|
routeIdsToPrune.delete(constructedRoute.id);
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await Promise.all(Array.from(routeIdsToPrune).map(async (routeId) => {
|
||||||
|
await this.repository.removeRouteIfExists(routeId);
|
||||||
|
}));
|
||||||
} catch(e: any) {
|
} catch(e: any) {
|
||||||
throw new ApiResponseError(e.message);
|
throw new ApiResponseError(e.message);
|
||||||
}
|
}
|
||||||
@@ -127,6 +135,10 @@ export class ApiBasedRepositoryLoader {
|
|||||||
public async fetchAndUpdateStopAndPolylineDataForRoutesWithSystemId(systemId: string) {
|
public async fetchAndUpdateStopAndPolylineDataForRoutesWithSystemId(systemId: string) {
|
||||||
// Fetch from the API
|
// Fetch from the API
|
||||||
// Pass JSON output into two different methods to update repository
|
// Pass JSON output into two different methods to update repository
|
||||||
|
const stopIdsToPrune = await this.constructExistingEntityIdSet(async () => {
|
||||||
|
return await this.repository.getStopsBySystemId(systemId);
|
||||||
|
});
|
||||||
|
|
||||||
const params = {
|
const params = {
|
||||||
getStops: "2",
|
getStops: "2",
|
||||||
};
|
};
|
||||||
@@ -147,9 +159,13 @@ export class ApiBasedRepositoryLoader {
|
|||||||
});
|
});
|
||||||
const json = await response.json();
|
const json = await response.json();
|
||||||
|
|
||||||
await this.updateStopDataForSystemAndApiResponse(systemId, json);
|
await this.updateStopDataForSystemAndApiResponse(systemId, json, stopIdsToPrune);
|
||||||
await this.updateOrderedStopDataForExistingStops(json);
|
await this.updateOrderedStopDataForExistingStops(json);
|
||||||
await this.updatePolylineDataForExistingRoutesAndApiResponse(json);
|
await this.updatePolylineDataForExistingRoutesAndApiResponse(json);
|
||||||
|
|
||||||
|
await Promise.all(Array.from(stopIdsToPrune).map(async (stopId) => {
|
||||||
|
await this.repository.removeStopIfExists(stopId);
|
||||||
|
}));
|
||||||
} catch(e: any) {
|
} catch(e: any) {
|
||||||
throw new ApiResponseError(e.message);
|
throw new ApiResponseError(e.message);
|
||||||
}
|
}
|
||||||
@@ -164,6 +180,10 @@ export class ApiBasedRepositoryLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async fetchAndUpdateShuttleDataForSystemId(systemId: string) {
|
public async fetchAndUpdateShuttleDataForSystemId(systemId: string) {
|
||||||
|
const shuttleIdsToPrune = await this.constructExistingEntityIdSet(async () => {
|
||||||
|
return await this.repository.getShuttlesBySystemId(systemId);
|
||||||
|
});
|
||||||
|
|
||||||
const params = {
|
const params = {
|
||||||
getBuses: "2"
|
getBuses: "2"
|
||||||
};
|
};
|
||||||
@@ -203,8 +223,14 @@ export class ApiBasedRepositoryLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await this.repository.addOrUpdateShuttle(constructedShuttle);
|
await this.repository.addOrUpdateShuttle(constructedShuttle);
|
||||||
|
|
||||||
|
shuttleIdsToPrune.delete(constructedShuttle.id);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await Promise.all(Array.from(shuttleIdsToPrune).map(async (shuttleId) => {
|
||||||
|
await this.repository.removeShuttleIfExists(shuttleId);
|
||||||
|
}));
|
||||||
} catch(e: any) {
|
} catch(e: any) {
|
||||||
throw new ApiResponseError(e.message);
|
throw new ApiResponseError(e.message);
|
||||||
}
|
}
|
||||||
@@ -261,7 +287,11 @@ export class ApiBasedRepositoryLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async updateStopDataForSystemAndApiResponse(systemId: string, json: any) {
|
protected async updateStopDataForSystemAndApiResponse(
|
||||||
|
systemId: string,
|
||||||
|
json: any,
|
||||||
|
setOfIdsToPrune: Set<string> = new Set(),
|
||||||
|
) {
|
||||||
if (json.stops) {
|
if (json.stops) {
|
||||||
const jsonStops = Object.values(json.stops);
|
const jsonStops = Object.values(json.stops);
|
||||||
|
|
||||||
@@ -277,6 +307,8 @@ export class ApiBasedRepositoryLoader {
|
|||||||
};
|
};
|
||||||
|
|
||||||
await this.repository.addOrUpdateStop(constructedStop);
|
await this.repository.addOrUpdateStop(constructedStop);
|
||||||
|
|
||||||
|
setOfIdsToPrune.delete(constructedStop.id);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user