document.write("
const { GraphQLServer } = require('graphql-yoga');
let count = 2;
let todos = [{
id: '0',
content: 'Buy milk',
isCompleted: true
},
{
id: '1',
content: 'Cook some lobster',
isCompleted: false
}];
const typeDefs = `
type Todo {
id: ID!
content: String!
isCompleted: Boolean!
}
type Query {
allTodos: [Todo!]!
Todo(id: ID!): Todo!
}
type Mutation {
createTodo(content: String!, isCompleted: Boolean!): Todo!
updateTodo(id: ID!, content: String, isCompleted: Boolean): Todo!
deleteTodo(id: ID!): Todo!
}
`;
const resolvers = {
Query: {
allTodos: () => {
return todos;
},
Todo: (_, { id }) => {
const todo = todos.find(x => x.id === id);
if (!todo) {
throw new Error('Cannot find your todo!');
}
return todo;
}
},
Mutation: {
createTodo: (_, { content, isCompleted }) => {
const newTodo = {
id: count++,
content,
isCompleted
}
todos = [...todos, newTodo];
return newTodo;
},
updateTodo: (_, { id, content, isCompleted }) => {
let updatedTodo;
todos = todos.map(todo => {
if (todo.id === id) {
updatedTodo = {
id: todo.id,
// for content and isCompleted, we first check if values are provided
content: content !== undefined ? content : todo.content,
isCompleted: isCompleted !== undefined ? isCompleted : todo.isCompleted
}
return updatedTodo;
} else {
return todo
}
});
return updatedTodo;
},
deleteTodo: (_, { id }) => {
const todoToDelete = todos.find(x => x.id === id);
todos = todos.filter(todo => {
return todo.id !== todoToDelete.id;
});
return todoToDelete;
}
}
}
const opts = {
port: 7777,
endpoint: '/graphql'
}
const server = new GraphQLServer({ typeDefs, resolvers, opts });
server.start(() => {
console.log(
`😄 Server running at http://localhost:${opts.port}${opts.endpoint}`
);
});
graphql-yoga-todo.js - Snippet hosted by \"Cacher\"
");