Search

Mutation Resolver

이젠 유저가 데이터를 변경하고 싶은(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 하나가 없어졌다는 것을 확인해볼 수 있습니다.