Created
January 10, 2022 15:47
-
-
Save ivanstnsk/a6c91c43e70c1d171c0d0500ef6a9493 to your computer and use it in GitHub Desktop.
Apollo server setup valid on 10 Jan 2022 (for the course https://www.linkedin.com/learning/learning-graphql-11292553)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const { createServer } = require('http'); | |
const { execute, subscribe } = require('graphql'); | |
const { SubscriptionServer } = require('subscriptions-transport-ws'); | |
const { makeExecutableSchema } = require('@graphql-tools/schema'); | |
const { ApolloServer, gql } = require('apollo-server-express'); | |
const { MockList } = require('@graphql-tools/mock'); | |
const { ApolloServerPluginLandingPageGraphQLPlayground } = require('apollo-server-core'); | |
const express = require('express'); | |
(async function () { | |
const typeDefs = gql` | |
scalar Date | |
type SkiDay { | |
id: ID! | |
date: Date! | |
mountain: String! | |
condition: Conditions | |
} | |
type Query { | |
totalDays: Int! | |
allDays: [SkiDay!]! | |
} | |
enum Conditions { | |
POWDER | |
HEAVY | |
ICE | |
THIN | |
} | |
input AddDayInput { | |
date: Date! | |
mountain: String! | |
condition: Conditions | |
} | |
type RemoveDayPayload { | |
day: SkiDay! | |
removed: Boolean | |
totalBefore: Int | |
totalAfter: Int | |
} | |
type Mutation { | |
addDay(input: AddDayInput!): SkiDay! | |
removeDay(id: ID!): RemoveDayPayload! | |
} | |
type Subscription { | |
newDay: SkiDay! | |
} | |
`; | |
// const resolvers = { | |
// }; | |
const mocks = { | |
Date: () => "12.12.1993", | |
Query: () => ({ | |
allDays: () => new MockList(5), | |
}), | |
} | |
const app = express(); | |
const httpServer = createServer(app); | |
const schema = makeExecutableSchema({ | |
typeDefs, | |
mocks, | |
// resolvers, | |
}); | |
const subscriptionServer = SubscriptionServer.create( | |
{ schema, execute, subscribe }, | |
{ server: httpServer, path: '/graphql' } | |
); | |
const server = new ApolloServer({ | |
schema, | |
plugins: [ | |
{ | |
async serverWillStart() { | |
return { | |
async drainServer() { | |
subscriptionServer.close(); | |
} | |
}; | |
} | |
}, | |
ApolloServerPluginLandingPageGraphQLPlayground(), | |
], | |
}); | |
await server.start(); | |
server.applyMiddleware({ app }); | |
const PORT = 4000; | |
httpServer.listen(PORT, () => | |
console.log(`Server is now running on http://localhost:${PORT}/graphql`) | |
); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment