이젠 유저가 데이터를 변경하고 싶은(DELETE, PUT, POST...) 경우의 Mutation type에 대한 resolver를 생성할 겁니다.
Mutation Resolvers
// 임시 사용(휘발성) 데이터
const tweets = [
{
id: "1",
text: "first one"
},
{
id: "2",
text: "second one"
}
];
const resolvers = {
Query: {
allTweets() {
return tweets;
}
// 객체구조분해할당을 통해, 인자 내용 중 id값을 변수로 들고옵니다.
tweet(root, { id }) {
// 원래라면, DB에 접근해서 어떤 SQL 코드를 실행해야합니다만, 여기선 그냥 find를 사용할게요
return tweets.find(tweet => tweet.id === id) || null;
}
}
Mutation: {
postTweet(_, { text, userId }) {
// 새 트윗을 만들어서 tweets 데이터에 추가
// 실제로는 DB에 접근해서 어떤 SQL 코드를 실행해야합니다만, 여기선 그냥 push method를 사용합니다.
const newTweet = {
id: tweets.length + 1,
text,
}
tweets.push(newTweet);
return newTweet;
}
}
};
JavaScript
복사
항상 명심해아할 것은, resolver function의 인자 순서는 root, argument이다!
실행해보시면, postTweet의 인자에 userid, text를 잘 작성해주면 응답이 잘 나옵니다. 또한 우리가 tweets 변수에 push를 했기에, allTweets를 실행해보시면, 여러분(유저)이 postTweet한 내용들이 잘 리턴됩니다
하지만, DB에 저장했다거나 그런 데이터가 아닌, 그저 메모리상에 데이터를 잠시 넣어둔거라서, 새로고침하면 postTweet의 내용은 날아갑니다.
그럼 이번엔 delete field를 구현해볼까요?
// 임시 사용(휘발성) 데이터
const tweets = [
{
id: "1",
text: "first one"
},
{
id: "2",
text: "second one"
}
];
const resolvers = {
Query: {
allTweets() {
return tweets;
}
// 객체구조분해할당을 통해, 인자 내용 중 id값을 변수로 들고옵니다.
tweet(root, { id }) {
// 원래라면, DB에 접근해서 어떤 SQL 코드를 실행해야합니다만, 여기선 그냥 find를 사용할게요
return tweets.find(tweet => tweet.id === id) || null;
}
}
Mutation: {
postTweet(_, { text, userId }) {
// 새 트윗을 만들어서 tweets 데이터에 추가
// 실제로는 DB에 접근해서 어떤 SQL 코드를 실행해야합니다만, 여기선 그냥 push method를 사용합니다.
const newTweet = {
id: tweets.length + 1,
text,
}
tweets.push(newTweet);
return newTweet;
},
deleteTweet(_, { id }) {
const tweet = tweets.find(tweet => tweet.id === id);
if(!tweet) {
return false;
}
tweets = tweets.filter(tweet => tweet.id !== id);
return true;
}
}
};
JavaScript
복사
deleteTweet을 구현해봤습니다. 로컬서버 아폴로 스튜디오에서 deleteTweet의 인자 id를 잘 넣어서 실행해보면 응답으로 tweet 하나가 없어졌다는 것을 확인해볼 수 있습니다.

