From 3761f43909c20c3dcb8c7c45aeababe688f2528f Mon Sep 17 00:00:00 2001 From: Brendan Chen Date: Thu, 27 Mar 2025 10:42:43 -0700 Subject: [PATCH] update server context to only include the notification repository --- src/ServerContext.ts | 3 ++- src/index.ts | 26 +++++++++++++------- src/resolvers/MutationResolvers.ts | 6 ++--- src/resolvers/QueryResolvers.ts | 4 +-- test/resolvers/MutationResolverTests.test.ts | 10 ++++---- test/resolvers/QueryResolverTests.test.ts | 2 +- test/testHelpers/apolloTestServerHelpers.ts | 3 ++- 7 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/ServerContext.ts b/src/ServerContext.ts index d6040ba..732f7d8 100644 --- a/src/ServerContext.ts +++ b/src/ServerContext.ts @@ -1,7 +1,8 @@ import { ETANotificationScheduler } from "./notifications/schedulers/ETANotificationScheduler"; import { ShuttleGetterSetterRepository } from "./repositories/ShuttleGetterSetterRepository"; +import { NotificationRepository } from "./repositories/NotificationRepository"; export interface ServerContext { shuttleRepository: ShuttleGetterSetterRepository; - notificationService: ETANotificationScheduler; + notificationRepository: NotificationRepository; } diff --git a/src/index.ts b/src/index.ts index 3880fac..75b9d20 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,6 +9,7 @@ import { ETANotificationScheduler } from "./notifications/schedulers/ETANotifica import { loadShuttleTestData } from "./loaders/loadShuttleTestData"; import { AppleNotificationSender } from "./notifications/senders/AppleNotificationSender"; import { InMemoryNotificationRepository } from "./repositories/InMemoryNotificationRepository"; +import { NotificationRepository } from "./repositories/NotificationRepository"; const typeDefs = readFileSync("./schema.graphqls", "utf8"); @@ -19,25 +20,32 @@ async function main() { introspection: process.env.NODE_ENV !== "production", }); - const repository = new UnoptimizedInMemoryShuttleRepository(); + const shuttleRepository = new UnoptimizedInMemoryShuttleRepository(); + + let notificationRepository: NotificationRepository; let notificationService: ETANotificationScheduler; if (process.argv.length > 2 && process.argv[2] == "integration-testing") { console.log("Using integration testing setup") - await loadShuttleTestData(repository); + await loadShuttleTestData(shuttleRepository); const appleNotificationSender = new AppleNotificationSender(false); - const inMemoryNotificationRepository = new InMemoryNotificationRepository(); + notificationRepository = new InMemoryNotificationRepository(); notificationService = new ETANotificationScheduler( - repository, - inMemoryNotificationRepository, + shuttleRepository, + notificationRepository, appleNotificationSender ); } else { const repositoryDataUpdater = new TimedApiBasedShuttleRepositoryLoader( - repository + shuttleRepository, ); await repositoryDataUpdater.start(); - notificationService = new ETANotificationScheduler(repository); + + notificationRepository = new InMemoryNotificationRepository(); + notificationService = new ETANotificationScheduler( + shuttleRepository, + notificationRepository + ); } const { url } = await startStandaloneServer(server, { @@ -46,8 +54,8 @@ async function main() { }, context: async () => { return { - repository, - notificationService, + shuttleRepository, + notificationRepository, } }, }); diff --git a/src/resolvers/MutationResolvers.ts b/src/resolvers/MutationResolvers.ts index 13c427e..adcc20c 100644 --- a/src/resolvers/MutationResolvers.ts +++ b/src/resolvers/MutationResolvers.ts @@ -30,7 +30,7 @@ export const MutationResolvers: Resolvers = { : ETANotificationScheduler.defaultSecondsThresholdForNotificationToFire, } - await context.notificationService.scheduleNotification(notificationData); + await context.notificationRepository.scheduleNotification(notificationData); const response: NotificationResponse = { message: "Notification scheduled", @@ -40,8 +40,8 @@ export const MutationResolvers: Resolvers = { return response; }, cancelNotification: async (_parent, args, context, _info) => { - if (context.notificationService.isNotificationScheduled(args.input)) { - await context.notificationService.cancelNotificationIfExists(args.input); + if (context.notificationRepository.isNotificationScheduled(args.input)) { + await context.notificationRepository.cancelNotificationIfExists(args.input); return { success: true, message: "Notification cancelled", diff --git a/src/resolvers/QueryResolvers.ts b/src/resolvers/QueryResolvers.ts index ccecf14..996f9ac 100644 --- a/src/resolvers/QueryResolvers.ts +++ b/src/resolvers/QueryResolvers.ts @@ -18,11 +18,11 @@ export const QueryResolvers: Resolvers = { }, isNotificationScheduled: async (_parent, args, contextValue, _info) => { const notificationData = args.input; - return contextValue.notificationService.isNotificationScheduled(notificationData); + return contextValue.notificationRepository.isNotificationScheduled(notificationData); }, secondsThresholdForNotification: async (_parent, args, contextValue, _info) => { const notificationData = args.input; - return contextValue.notificationService.getSecondsThresholdForScheduledNotification(notificationData); + return contextValue.notificationRepository.getSecondsThresholdForScheduledNotification(notificationData); }, }, } diff --git a/test/resolvers/MutationResolverTests.test.ts b/test/resolvers/MutationResolverTests.test.ts index 448f958..0fe487a 100644 --- a/test/resolvers/MutationResolverTests.test.ts +++ b/test/resolvers/MutationResolverTests.test.ts @@ -44,7 +44,7 @@ describe("MutationResolvers", () => { const notificationResponse = response.body.singleResult.data?.scheduleNotification as any; expect(notificationResponse.success).toBe(false); - expect(context.notificationService.isNotificationScheduled(notificationInput)).toBe(false); + expect(context.notificationRepository.isNotificationScheduled(notificationInput)).toBe(false); } @@ -72,7 +72,7 @@ describe("MutationResolvers", () => { expect(notificationResponse?.success).toBe(true); expect(notificationResponse?.data).toEqual(expectedNotificationData); - expect(context.notificationService.getSecondsThresholdForScheduledNotification(expectedNotificationData)).toBe(240); + expect(context.notificationRepository.getSecondsThresholdForScheduledNotification(expectedNotificationData)).toBe(240); }); it("adds a notification with the default seconds threshold if none is provided", async () => { @@ -93,7 +93,7 @@ describe("MutationResolvers", () => { const notificationResponse = response.body.singleResult.data?.scheduleNotification as any; expect(notificationResponse?.success).toBe(true); - expect(context.notificationService.getSecondsThresholdForScheduledNotification(notificationInput)).toBe(180); + expect(context.notificationRepository.getSecondsThresholdForScheduledNotification(notificationInput)).toBe(180); }); it("fails if the shuttle ID doesn't exist", async () => { @@ -150,7 +150,7 @@ describe("MutationResolvers", () => { stopId: stop.id, secondsThreshold: 180, } - await context.notificationService.scheduleNotification(notificationInput); + await context.notificationRepository.scheduleNotification(notificationInput); const notificationLookup = { ...notificationInput @@ -166,7 +166,7 @@ describe("MutationResolvers", () => { expect(notificationResponse.success).toBe(true); expect(notificationResponse.data).toEqual(notificationLookup); - expect(context.notificationService.isNotificationScheduled(notificationLookup)).toBe(false); + expect(context.notificationRepository.isNotificationScheduled(notificationLookup)).toBe(false); }); it("fails if the notification doesn't exist", async () => { diff --git a/test/resolvers/QueryResolverTests.test.ts b/test/resolvers/QueryResolverTests.test.ts index 6710d3a..11a3282 100644 --- a/test/resolvers/QueryResolverTests.test.ts +++ b/test/resolvers/QueryResolverTests.test.ts @@ -112,7 +112,7 @@ describe("QueryResolvers", () => { deviceId: "1", secondsThreshold: 240, }; - await context.notificationService.scheduleNotification(notification); + await context.notificationRepository.scheduleNotification(notification); const notificationLookup: any = { ...notification, diff --git a/test/testHelpers/apolloTestServerHelpers.ts b/test/testHelpers/apolloTestServerHelpers.ts index b629ed8..a7512ec 100644 --- a/test/testHelpers/apolloTestServerHelpers.ts +++ b/test/testHelpers/apolloTestServerHelpers.ts @@ -5,6 +5,7 @@ import { UnoptimizedInMemoryShuttleRepository } from "../../src/repositories/Uno import { beforeEach } from "@jest/globals"; import { ServerContext } from "../../src/ServerContext"; import { ETANotificationScheduler } from "../../src/notifications/schedulers/ETANotificationScheduler"; +import { InMemoryNotificationRepository } from "../../src/repositories/InMemoryNotificationRepository"; function setUpTestServer() { @@ -26,7 +27,7 @@ export function setupTestServerContext() { beforeEach(() => { context.shuttleRepository = new UnoptimizedInMemoryShuttleRepository(); - context.notificationService = new ETANotificationScheduler(context.repository); + context.notificationRepository = new InMemoryNotificationRepository(); }); return context as ServerContext;