mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-17 16:00:32 +00:00
finish the rename for the data loaders
This commit is contained in:
@@ -4,9 +4,9 @@ import { startStandaloneServer } from "@apollo/server/standalone";
|
|||||||
import { MergedResolvers } from "./MergedResolvers";
|
import { MergedResolvers } from "./MergedResolvers";
|
||||||
import { ServerContext } from "./ServerContext";
|
import { ServerContext } from "./ServerContext";
|
||||||
import { UnoptimizedInMemoryShuttleRepository } from "./repositories/UnoptimizedInMemoryShuttleRepository";
|
import { UnoptimizedInMemoryShuttleRepository } from "./repositories/UnoptimizedInMemoryShuttleRepository";
|
||||||
import { TimedApiBasedRepositoryLoader } from "./loaders/TimedApiBasedRepositoryLoader";
|
import { TimedApiBasedShuttleRepositoryLoader } from "./loaders/TimedApiBasedShuttleRepositoryLoader";
|
||||||
import { ETANotificationScheduler } from "./notifications/schedulers/ETANotificationScheduler";
|
import { ETANotificationScheduler } from "./notifications/schedulers/ETANotificationScheduler";
|
||||||
import { loadTestData } from "./loaders/loadTestData";
|
import { loadShuttleTestData } from "./loaders/loadShuttleTestData";
|
||||||
import { AppleNotificationSender } from "./notifications/senders/AppleNotificationSender";
|
import { AppleNotificationSender } from "./notifications/senders/AppleNotificationSender";
|
||||||
|
|
||||||
const typeDefs = readFileSync("./schema.graphqls", "utf8");
|
const typeDefs = readFileSync("./schema.graphqls", "utf8");
|
||||||
@@ -22,11 +22,11 @@ async function main() {
|
|||||||
let notificationService: ETANotificationScheduler;
|
let notificationService: ETANotificationScheduler;
|
||||||
if (process.argv.length > 2 && process.argv[2] == "integration-testing") {
|
if (process.argv.length > 2 && process.argv[2] == "integration-testing") {
|
||||||
console.log("Using integration testing setup")
|
console.log("Using integration testing setup")
|
||||||
await loadTestData(repository);
|
await loadShuttleTestData(repository);
|
||||||
const appleNotificationSender = new AppleNotificationSender(false);
|
const appleNotificationSender = new AppleNotificationSender(false);
|
||||||
notificationService = new ETANotificationScheduler(repository, appleNotificationSender);
|
notificationService = new ETANotificationScheduler(repository, appleNotificationSender);
|
||||||
} else {
|
} else {
|
||||||
const repositoryDataUpdater = new TimedApiBasedRepositoryLoader(
|
const repositoryDataUpdater = new TimedApiBasedShuttleRepositoryLoader(
|
||||||
repository
|
repository
|
||||||
);
|
);
|
||||||
await repositoryDataUpdater.start();
|
await repositoryDataUpdater.start();
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { ShuttleGetterSetterRepository } from "../repositories/ShuttleGetterSetterRepository";
|
import { ShuttleGetterSetterRepository } from "../repositories/ShuttleGetterSetterRepository";
|
||||||
import { IEntityWithId, IEta, IRoute, IShuttle, IStop, ISystem } from "../entities/entities";
|
import { IEntityWithId, IEta, IRoute, IShuttle, IStop, ISystem } from "../entities/entities";
|
||||||
import { RepositoryLoader } from "./RepositoryLoader";
|
import { ShuttleRepositoryLoader } from "./ShuttleRepositoryLoader";
|
||||||
|
|
||||||
export class ApiResponseError extends Error {
|
export class ApiResponseError extends Error {
|
||||||
constructor(message: string) {
|
constructor(message: string) {
|
||||||
@@ -14,7 +14,7 @@ export class ApiResponseError extends Error {
|
|||||||
* Passio Go API. Supports automatic pruning of all data types
|
* Passio Go API. Supports automatic pruning of all data types
|
||||||
* which inherit from `IEntityWithId`.
|
* which inherit from `IEntityWithId`.
|
||||||
*/
|
*/
|
||||||
export class ApiBasedRepositoryLoader implements RepositoryLoader {
|
export class ApiBasedShuttleRepositoryLoader implements ShuttleRepositoryLoader {
|
||||||
supportedSystemIds = ["263"];
|
supportedSystemIds = ["263"];
|
||||||
baseUrl = "https://passiogo.com/mapGetData.php";
|
baseUrl = "https://passiogo.com/mapGetData.php";
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
export interface RepositoryLoader {
|
export interface ShuttleRepositoryLoader {
|
||||||
fetchAndUpdateSystemData(): Promise<void>;
|
fetchAndUpdateSystemData(): Promise<void>;
|
||||||
fetchAndUpdateRouteDataForExistingSystemsInRepository(): Promise<void>;
|
fetchAndUpdateRouteDataForExistingSystemsInRepository(): Promise<void>;
|
||||||
fetchAndUpdateRouteDataForSystemId(systemId: string): Promise<void>;
|
fetchAndUpdateRouteDataForSystemId(systemId: string): Promise<void>;
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { ShuttleGetterSetterRepository } from "../repositories/ShuttleGetterSetterRepository";
|
import { ShuttleGetterSetterRepository } from "../repositories/ShuttleGetterSetterRepository";
|
||||||
import { ApiBasedRepositoryLoader } from "./ApiBasedRepositoryLoader";
|
import { ApiBasedShuttleRepositoryLoader } from "./ApiBasedShuttleRepositoryLoader";
|
||||||
|
|
||||||
// Ideas to break this into smaller pieces in the future:
|
// Ideas to break this into smaller pieces in the future:
|
||||||
// Have one repository data loader running for each supported system
|
// Have one repository data loader running for each supported system
|
||||||
@@ -15,7 +15,7 @@ import { ApiBasedRepositoryLoader } from "./ApiBasedRepositoryLoader";
|
|||||||
// - OrderedStops: reload every few minutes
|
// - OrderedStops: reload every few minutes
|
||||||
// - Systems: reload once a day
|
// - Systems: reload once a day
|
||||||
|
|
||||||
export class TimedApiBasedRepositoryLoader extends ApiBasedRepositoryLoader {
|
export class TimedApiBasedShuttleRepositoryLoader extends ApiBasedShuttleRepositoryLoader {
|
||||||
private shouldBeRunning: boolean = false;
|
private shouldBeRunning: boolean = false;
|
||||||
private timer: any;
|
private timer: any;
|
||||||
|
|
||||||
@@ -4454,7 +4454,7 @@ const etas: IEta[] = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
export async function loadTestData(repository: ShuttleGetterSetterRepository) {
|
export async function loadShuttleTestData(repository: ShuttleGetterSetterRepository) {
|
||||||
await Promise.all(systems.map(async (system) => {
|
await Promise.all(systems.map(async (system) => {
|
||||||
await repository.addOrUpdateSystem(system);
|
await repository.addOrUpdateSystem(system);
|
||||||
}));
|
}));
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { beforeEach, describe, expect, it, jest, test } from "@jest/globals";
|
import { beforeEach, describe, expect, it, jest, test } from "@jest/globals";
|
||||||
import { ApiBasedRepositoryLoader, ApiResponseError } from "../../src/loaders/ApiBasedRepositoryLoader";
|
import { ApiBasedShuttleRepositoryLoader, ApiResponseError } from "../../src/loaders/ApiBasedShuttleRepositoryLoader";
|
||||||
import { UnoptimizedInMemoryShuttleRepository } from "../../src/repositories/UnoptimizedInMemoryShuttleRepository";
|
import { UnoptimizedInMemoryShuttleRepository } from "../../src/repositories/UnoptimizedInMemoryShuttleRepository";
|
||||||
import { fetchSystemDataSuccessfulResponse } from "../jsonSnapshots/fetchSystemData/fetchSystemDataSuccessfulResponse";
|
import { fetchSystemDataSuccessfulResponse } from "../jsonSnapshots/fetchSystemData/fetchSystemDataSuccessfulResponse";
|
||||||
import { fetchSystemDataFailedResponse } from "../jsonSnapshots/fetchSystemData/fetchSystemDataFailedResponse";
|
import { fetchSystemDataFailedResponse } from "../jsonSnapshots/fetchSystemData/fetchSystemDataFailedResponse";
|
||||||
@@ -23,10 +23,10 @@ async function assertAsyncCallbackThrowsApiResponseError(callback: () => Promise
|
|||||||
}
|
}
|
||||||
|
|
||||||
describe("ApiBasedRepositoryLoader", () => {
|
describe("ApiBasedRepositoryLoader", () => {
|
||||||
let loader: ApiBasedRepositoryLoader;
|
let loader: ApiBasedShuttleRepositoryLoader;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
loader = new ApiBasedRepositoryLoader(new UnoptimizedInMemoryShuttleRepository());
|
loader = new ApiBasedShuttleRepositoryLoader(new UnoptimizedInMemoryShuttleRepository());
|
||||||
resetGlobalFetchMockJson();
|
resetGlobalFetchMockJson();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, jest } from "@jest/globals";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, jest } from "@jest/globals";
|
||||||
import { TimedApiBasedRepositoryLoader } from "../../src/loaders/TimedApiBasedRepositoryLoader";
|
import { TimedApiBasedShuttleRepositoryLoader } from "../../src/loaders/TimedApiBasedShuttleRepositoryLoader";
|
||||||
import { resetGlobalFetchMockJson } from "../testHelpers/fetchMockHelpers";
|
import { resetGlobalFetchMockJson } from "../testHelpers/fetchMockHelpers";
|
||||||
import { UnoptimizedInMemoryShuttleRepository } from "../../src/repositories/UnoptimizedInMemoryShuttleRepository";
|
import { UnoptimizedInMemoryShuttleRepository } from "../../src/repositories/UnoptimizedInMemoryShuttleRepository";
|
||||||
|
|
||||||
describe("TimedApiBasedRepositoryLoader", () => {
|
describe("TimedApiBasedRepositoryLoader", () => {
|
||||||
let loader: TimedApiBasedRepositoryLoader;
|
let loader: TimedApiBasedShuttleRepositoryLoader;
|
||||||
let spies: any;
|
let spies: any;
|
||||||
|
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
@@ -15,7 +15,7 @@ describe("TimedApiBasedRepositoryLoader", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
resetGlobalFetchMockJson();
|
resetGlobalFetchMockJson();
|
||||||
|
|
||||||
loader = new TimedApiBasedRepositoryLoader(new UnoptimizedInMemoryShuttleRepository());
|
loader = new TimedApiBasedShuttleRepositoryLoader(new UnoptimizedInMemoryShuttleRepository());
|
||||||
|
|
||||||
spies = {
|
spies = {
|
||||||
fetchAndUpdateSystemData: jest.spyOn(loader, 'fetchAndUpdateSystemData'),
|
fetchAndUpdateSystemData: jest.spyOn(loader, 'fetchAndUpdateSystemData'),
|
||||||
|
|||||||
Reference in New Issue
Block a user