-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
136 lines (123 loc) · 3.21 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import express from 'express'
import { graphqlHTTP } from 'express-graphql'
import { GraphQLSchema, GraphQLString, GraphQLObjectType, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLBoolean } from 'graphql'
const users = [
{
id: 1,
name: "Budha",
email: "budha@tyk.io"
},
{
id: 2,
name: "James",
email: "james@gmail.com"
}
]
const todos = [
{
id: 1,
userId: 1,
task: "Book flight tickets",
completed: true
},
{
id: 2,
userId: 1,
task: "Wash dishes",
completed: false
},
{
id: 3,
userId: 2,
task: "Visit the Botanic gardens",
completed: false
}
]
const TodoType = new GraphQLObjectType({
name: "Todos",
description: "This a list of todos for a user",
fields: () => ({
id: {
type: GraphQLNonNull(GraphQLInt)
},
userId: {
type: GraphQLNonNull(GraphQLInt)
},
task: { type: GraphQLString},
completed: {
type: GraphQLBoolean
}
})
})
const UserType = new GraphQLObjectType({
name:"User",
description: "This represents a user",
fields: () => ({
id: { type: GraphQLNonNull(GraphQLInt)},
name: { type: GraphQLString},
email: { type: GraphQLString},
todos: {
type: new GraphQLList (TodoType),
resolve: (user)=> {
return todos.filter(todo => todo.userId === user.id)
}
}
})
})
const RootQueryType = new GraphQLObjectType({
name: "Query",
description: "This is the root query",
fields: () => ({
hello: {
type: GraphQLString,
description: "Just saying hello",
resolve: () => "Hello World!"
},
getUsers: {
type: new GraphQLList(UserType),
description: "List of all users",
resolve: () => users
},
getUser: {
type: UserType,
description: "Requesting a single user",
args: {
id: { type: GraphQLNonNull(GraphQLInt)}
},
resolve: (parent, args) => users.find(user => user.id === args.id)
}
})
})
const RootMutationType = new GraphQLObjectType ({
name: "Mutation",
description: "This is the root mutation",
fields: () => ({
addUser: {
type: new GraphQLList(UserType),
description: "Add a new user",
args: {
name: { type: GraphQLNonNull(GraphQLString)},
email: { type: GraphQLNonNull(GraphQLString)}
},
resolve:(parent, args) => {
const user = {
id: users.length+1,
name: args.name,
email: args.email
}
users.push(user)
return users
}
}
})
})
const schema = new GraphQLSchema({
query: RootQueryType,
mutation: RootMutationType
})
const app = express()
app.use('/graphql', graphqlHTTP ({
schema: schema,
graphiql: true
}))
app.listen(4001, ()=> console.log("Server running on localhost:4001/graphql"))