Skip to content

Instantly share code, notes, and snippets.

@niamurrell
Created May 2, 2019 13:48
Show Gist options
  • Save niamurrell/717ee0d05600b336873f500243352c80 to your computer and use it in GitHub Desktop.
Save niamurrell/717ee0d05600b336873f500243352c80 to your computer and use it in GitHub Desktop.
const { ApolloServer, gql } = require('apollo-server');
const lifts = require("./data/lifts.json");
const trails = require("./data/trails.json");
const typeDefs = gql`
type Lift {
id: ID!
name: String!
status: LiftStatus
capacity: Int!
night: Boolean
elevationGain: Int!
trailAccess: [Trail]!
url: String!
}
type Trail {
id: String!
name: String!
difficulty: Difficulty
status: TrailStatus
groomed: Boolean
snowmaking: Boolean
trees: Boolean
night: Boolean
accessedByLifts: [Lift]!
}
enum LiftStatus {
OPEN
CLOSED
HOLD
}
enum Difficulty {
expert
advanced
beginner
intermediate
}
enum TrailStatus {
OPEN
CLOSED
}
type Query {
liftCount(status: LiftStatus): Int!
trailCount(status: TrailStatus!): Int!
allLifts:[Lift!]!
allTrails(status: TrailStatus): [Trail!]!
findTrailById(id: ID!): Trail!
findByLiftId(id: ID!): Lift!
}
`;
const resolvers = {
Query: {
allTrails: (parent, { status }) => {
if (!status) {
return trails;
} else {
return trails.filter(trail => trail.status === status);
}
},
allLifts: () => lifts,
findTrailById: (parent, { id }) => {
return trails.find(trail => id = trail.id)
},
findByLiftId: (parent, args) => {
return lifts.find(lift => args.id === lift.id)
},
trailCount: (parent, { status }) => {
if (!status) return trails.length;
return trails.filter(trail => status === trail.status).length
},
liftCount: (parent, { status }) => {
if (!status) return lifts.length;
return lifts.filter(lift => status === lift.status).length
},
},
Lift: {
url: parent => `/lifts/${parent.id}`,
trailAccess: parent => {
parent.trails.map(id => trails.find(trail => id === trail.id))
}
}
};
const server = new ApolloServer({
typeDefs,
resolvers
});
server.listen().then(() => console.log('Server running on port 4000'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment