GraphQL 시작하기 1에서 GET 위주의 기능만을 살펴봤다.
이번에는 나머지 CRUD에서 CREATE UPDATE DELETE가 어떤 식으로 동작하는지 살펴보자.
스키마에 자료를 변경해야 하는 상황에서는 Query대신 Mutation이라는 타입에 선언한다.
type Person {
id: Int!
name: String!
age: Int!
gender: String
}
type Query {
people: [Person]!
onePerson(id: Int!): Person
}
type Mutation {
addUser(name: String!, age: Int!, gender: String!): Person
deleteUser(id: Int!): Boolean!
}
다음은 addUser를 선언하고 이는 Person을 반환한다. 또한 deleteUser는 Boolean타입을 반환한다.
import { getById, getUser, deleteUser, addUser } from "../db/db";
const resolvers = {
Query: {
people: () => getUser(),
onePerson: (_, args) => {
return getById(args.id);
}
},
Mutation: {
addUser: (_, { name, age, gender }) => {
return addUser(name, age, gender);
},
deleteUser: (_, id) => {
return deleteUser(id.id);
}
}
};
export default resolvers;
Resolver에서는 Mutation을 선언하고 addUser와 deleteUser를 실제로 생성하고 이는 곧 각각의 함수를 반환한다.
함수는 수동으로 값을 변경하는 편인거 같다.
let people = [
{
id: 1,
name: () => `Moon`,
age: () => `18`,
gender: () => `male`
},
{
id: 5,
name: () => `Emma`,
age: () => `33`,
gender: () => `female`
}
];
export const getUser = () => people;
export const getById = id => {
const filteredPeople = people.filter(person => id === person.id);
return filteredPeople[0];
};
export const deleteUser = id => {
const filteredPeople = people.filter(person => person.id !== id);
people = filteredPeople;
return true;
};
export const addUser = (name, age, gender) => {
const newUser = {
id: people.length + 1,
name,
age,
gender
};
people.push(newUser);
return newUser;
};
이때 삭제의 경우 filter를 통해 새로운 배열을 만드는 것은 상당히 충격적..
'BackEnd > GraphQL' 카테고리의 다른 글
GraphQL 시작하기(1) (0) | 2019.05.08 |
---|