import { Eta, Resolvers } from "../generated/graphql"; import { ServerContext } from "../ServerContext"; export const ShuttleResolvers: Resolvers = { Shuttle: { eta: async (parent, args, contextValue, _) => { if (!args.forStopId) return null; const system = contextValue.findSystemById(parent.systemId); if (!system) return null; const etaForStopId = await system.etaRepository.getEtaForShuttleAndStopId(parent.id, args.forStopId); if (etaForStopId === null) return null; return { stopId: args.forStopId, secondsRemaining: etaForStopId.secondsRemaining, shuttleId: parent.id, shuttle: parent, systemId: system.id, updatedTimeMs: etaForStopId.updatedTime, }; }, etas: async (parent, args, contextValue, _) => { const system = contextValue.findSystemById(parent.systemId); if (!system) return null; const etasForShuttle = await system.etaRepository.getEtasForShuttleId(parent.id); if (!etasForShuttle) return null; const computedEtas = await Promise.all( etasForShuttle.map(async ({ secondsRemaining, stopId, updatedTime }): Promise => { return { secondsRemaining, stopId, shuttle: parent, shuttleId: parent.id, systemId: system.id, updatedTime: updatedTime, } })); if (computedEtas.every((eta) => eta !== null)) { return computedEtas .slice() .sort((a, b) => (a!.secondsRemaining - b!.secondsRemaining)); } return []; }, route: async (parent, args, contextValue, _) => { const system = contextValue.findSystemById(parent.systemId); if (!system) return null; const route = await system.shuttleRepository.getRouteById(parent.routeId); if (route === null) return null; return { color: route.color, id: route.id, name: route.name, polylineCoordinates: route.polylineCoordinates, systemId: system.id, updatedTimeMs: route.updatedTime } } }, }