-
Notifications
You must be signed in to change notification settings - Fork 2
/
app.js
110 lines (77 loc) · 1.94 KB
/
app.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
const { GraphQLServer } = require('graphql-yoga');
//sample data
let todos = [
{
id: 1,
title: "This is my todo",
body: "sample content in id 1"
},
{
id: 2,
title: "This is my second todo",
body: "sample content in id 2"
},
{
id: 3,
title: "This is my third todo",
body: "sample content in id 3"
}
]
//Type definitions
const typeDefs = `
type Todo{
id: ID!
title: String!
body: String!
}
type Query{
getAlltodos : [Todo!]!
}
type Mutation{
addTodo(title:String!,body:String!):Todo!,
updateTodo(id:ID!,title:String!,body:String!):Todo!
deleteTodo(id:ID!):Todo!
}
`
// resolvers
const resolvers = {
Query: {
getAlltodos(root, args, ctx, info) {
return todos
}
},
Mutation: {
addTodo(root, args, ctx, info) {
if (args) {
todos.push({
id: Math.random(),
title: args.title,
body: args.body
})
} else {
throw new Error()
}
return todos[todos.length - 1];
},
updateTodo(root, args, ctx, info) {
const index = todos.findIndex(e => e.id === +args.id)
let todo = todos[index];
todo.title = args.title
todo.body = args.body
return todos[index]
},
deleteTodo(root, args, ctx, info) {
const index = todos.findIndex(e => e.id === +args.id)
let todo = todos[index];
const filter = todos.filter(e => e.id !== +args.id)
todos = filter
return todo
}
}
}
const server = new GraphQLServer({
typeDefs, resolvers, context: {
//if we pass anything here can be available in all resolvers
}
})
server.start(() => console.log('Server is running on localhost:4000☄'))