diff --git a/src/index.ts b/src/index.ts index cc2aa05..8bbc890 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,15 +2,15 @@ import { readFileSync } from "fs"; import { ApolloServer } from "@apollo/server"; import { startStandaloneServer } from "@apollo/server/standalone"; import { resolvers } from "./resolvers"; -import { sharedMemory, SharedMemory } from "./sharedMemory"; +import { sharedMemory } from "./sharedMemory"; +import { loadTestData } from "./testData"; +import { ServerContext } from "./serverContext"; const typeDefs = readFileSync("./schema.graphql", "utf8"); -interface ServerContext { - sharedMemory: SharedMemory, -} - async function main() { + loadTestData(sharedMemory); + const server = new ApolloServer({ typeDefs, resolvers diff --git a/src/resolvers.ts b/src/resolvers.ts index 0dda813..4bc9695 100644 --- a/src/resolvers.ts +++ b/src/resolvers.ts @@ -1,133 +1,13 @@ import { Eta, OrderedStop, Resolvers, Route, Shuttle, Stop, System } from "./generated/graphql"; +import { ServerContext } from "./serverContext"; -// Mock data -const systems: System[] = [ - { - id: "1", - name: "Chapman University", - routes: [], - stops: [], - shuttles: [], - }, -]; - -const routes: Route[] = [ - { - name: "Red Route", - id: "1", - system: systems[0], - orderedStops: [], - shuttles: [], - polylineCoordinates: [], - color: "#ffffff", - }, - { - name: "Teal Route", - id: "2", - system: systems[0], - orderedStops: [], - shuttles: [], - polylineCoordinates: [], - color: "#ffffff", - }, -]; - -const stops: Stop[] = [ - { - id: "1", - name: "Chapman Court", - coordinates: { - latitude: 33.796001, - longitude: -117.8892805, - }, - system: systems[0], - etas: [], - orderedStops: [], - }, - { - id: "2", - name: "Chapman Grand", - coordinates: { - latitude: 33.804433, - longitude: -117.895966, - }, - system: systems[0], - etas: [], - orderedStops: [], - } -]; - -const orderedStopsForRedRoute: OrderedStop[] = [ - { - route: routes[0], - stop: stops[0], - }, - { - route: routes[0], - stop: stops[1], - }, -]; - -const orderedStopsForTealRoute: OrderedStop[] = [ - { - route: routes[1], - stop: stops[1], - }, - { - route: routes[1], - stop: stops[0], - } -] - -orderedStopsForRedRoute[0].nextStop = orderedStopsForRedRoute[1]; -orderedStopsForRedRoute[1].previousStop = orderedStopsForRedRoute[0]; -orderedStopsForTealRoute[0].nextStop = orderedStopsForTealRoute[1]; -orderedStopsForTealRoute[1].previousStop = orderedStopsForTealRoute[0]; - -stops[0].orderedStops = [orderedStopsForRedRoute[0], orderedStopsForTealRoute[1]]; -stops[1].orderedStops = [orderedStopsForRedRoute[1], orderedStopsForTealRoute[0]]; -routes[0].orderedStops = orderedStopsForRedRoute; -routes[1].orderedStops = orderedStopsForTealRoute; - -const shuttles: Shuttle[] = [ - { - name: "Red Shuttle 17", - id: "1", - coordinates: { - latitude: 33.796001, - longitude: -117.8892805, - }, - route: routes[0], - system: systems[0], - etas: [], - } -]; - -const etas: Eta[] = [ - { - stop: stops[0], - shuttle: shuttles[0], - secondsRemaining: 12.023, - }, - { - stop: stops[1], - shuttle: shuttles[0], - secondsRemaining: 600.123, - } -]; - -shuttles[0].etas = etas; - -routes[0].shuttles = shuttles; - -systems[0].stops = stops; -systems[0].routes = routes; -systems[0].shuttles = shuttles; - -export const resolvers: Resolvers = { +export const resolvers: Resolvers = { Query: { - systems: () => systems, + systems: (parent, args, contextValue, info) => { + return contextValue.sharedMemory.systems; + }, system: (parent, args, contextValue, info) => { + const systems = contextValue.sharedMemory.systems; const system = systems.find((system) => system.id === args.id); if (!system) { return null; @@ -138,6 +18,8 @@ export const resolvers: Resolvers = { }, System: { stop: (parent, args, contextValue, info) => { + // TODO implement interface with ID and one function to perform search + const stops = parent.stops; const stop = stops.find((stop) => stop.id === args.id); if (!stop) { return null; @@ -146,6 +28,7 @@ export const resolvers: Resolvers = { return stop; }, route: (parent, args, contextValue, info) => { + const routes = parent.routes const route = routes.find((route) => route.id === args.id); if (!route) { return null; @@ -154,6 +37,7 @@ export const resolvers: Resolvers = { return route; }, shuttle: (parent, args, contextValue, info) => { + const shuttles = parent.shuttles; const shuttle = shuttles.find((shuttle) => shuttle.id === args.id); if (!shuttle) { return null; diff --git a/src/serverContext.ts b/src/serverContext.ts new file mode 100644 index 0000000..d0667d7 --- /dev/null +++ b/src/serverContext.ts @@ -0,0 +1,5 @@ +import { SharedMemory } from "./sharedMemory"; + +export interface ServerContext { + sharedMemory: SharedMemory, +} \ No newline at end of file diff --git a/src/testData.ts b/src/testData.ts new file mode 100644 index 0000000..ef694d3 --- /dev/null +++ b/src/testData.ts @@ -0,0 +1,130 @@ +// Mock data +import { Eta, OrderedStop, Route, Shuttle, Stop, System } from "./generated/graphql"; +import { SharedMemory } from "./sharedMemory"; + +const systems: System[] = [ + { + id: "1", + name: "Chapman University", + routes: [], + stops: [], + shuttles: [], + }, +]; + +const routes: Route[] = [ + { + name: "Red Route", + id: "1", + system: systems[0], + orderedStops: [], + shuttles: [], + polylineCoordinates: [], + color: "#ffffff", + }, + { + name: "Teal Route", + id: "2", + system: systems[0], + orderedStops: [], + shuttles: [], + polylineCoordinates: [], + color: "#ffffff", + }, +]; + +const stops: Stop[] = [ + { + id: "1", + name: "Chapman Court", + coordinates: { + latitude: 33.796001, + longitude: -117.8892805, + }, + system: systems[0], + etas: [], + orderedStops: [], + }, + { + id: "2", + name: "Chapman Grand", + coordinates: { + latitude: 33.804433, + longitude: -117.895966, + }, + system: systems[0], + etas: [], + orderedStops: [], + } +]; + +const orderedStopsForRedRoute: OrderedStop[] = [ + { + route: routes[0], + stop: stops[0], + }, + { + route: routes[0], + stop: stops[1], + }, +]; + +const orderedStopsForTealRoute: OrderedStop[] = [ + { + route: routes[1], + stop: stops[1], + }, + { + route: routes[1], + stop: stops[0], + } +] + +orderedStopsForRedRoute[0].nextStop = orderedStopsForRedRoute[1]; +orderedStopsForRedRoute[1].previousStop = orderedStopsForRedRoute[0]; +orderedStopsForTealRoute[0].nextStop = orderedStopsForTealRoute[1]; +orderedStopsForTealRoute[1].previousStop = orderedStopsForTealRoute[0]; + +stops[0].orderedStops = [orderedStopsForRedRoute[0], orderedStopsForTealRoute[1]]; +stops[1].orderedStops = [orderedStopsForRedRoute[1], orderedStopsForTealRoute[0]]; +routes[0].orderedStops = orderedStopsForRedRoute; +routes[1].orderedStops = orderedStopsForTealRoute; + +const shuttles: Shuttle[] = [ + { + name: "Red Shuttle 17", + id: "1", + coordinates: { + latitude: 33.796001, + longitude: -117.8892805, + }, + route: routes[0], + system: systems[0], + etas: [], + } +]; + +const etas: Eta[] = [ + { + stop: stops[0], + shuttle: shuttles[0], + secondsRemaining: 12.023, + }, + { + stop: stops[1], + shuttle: shuttles[0], + secondsRemaining: 600.123, + } +]; + +shuttles[0].etas = etas; + +routes[0].shuttles = shuttles; + +systems[0].stops = stops; +systems[0].routes = routes; +systems[0].shuttles = shuttles; + +export function loadTestData(sharedMemory: SharedMemory) { + sharedMemory.systems = systems; +}