[Graph QL] GraphQL Schema - 데이터 생성 및 삭제하기

유나니·2020년 10월 10일
0

graphql_til

목록 보기
2/3

Mutation

지금까지 데이터의 조회를 위한 Query에 대해서 알아봤다면, 지금부터는 데이터를 생성하고 삭제하는 Mutation에 대해 알아보자

1. add Movie

우선 스키마를 정의하는 부분에서 addMovie 요청이 들어왔을 시 출력되어야 할 데이터의 타입을 정의한다.

type Movie {
    id: Int!,
    name: String!,
    score: Int!,
}
type Mutation {
    addMovie(name:String!,score:Int!): Movie!,
}

영화의 이름과 평점을 입력하면 Movie의 스키마에 맞게 결과물이 출력되어 보여질 것을 정의한 것이다.

db.js
export function addMovie(name,score) {
  const newMovie = {
    id: movies[movies.length-1].id + 1,
    name,
    score
  }
  movies.push(newMovie)
  return newMovie
}

사용자의 입력값을 받아 새로운 object를 만들고 기존의 데이터 배열에 추가해준다.

resolvers.js
import { addMovie } from "../DB/db"

const resolvers = {
  Mutation: {
    addMovie: (_, { name, score }) =>  addMovie(name,score),
  }
}

export default resolvers

사용자의 입력값과 함께 addMovie 요청이 들어오면 db.js에서 정의한 대로 새로운 영화 객체를 만드는 작업을 수행한다.

2. delete Movie

스키마를 정의하는 부분에서 deleteMovie 요청이 들어왔을 시 출력되어야 할 데이터의 타입을 정의한다.

type Movie {
    id: Int!,
    name: String!,
    score: Int!,
}
type Mutation {
    deleteMovie(id:Int!): String!,
}

영화의 id를 입력하면 쿼리 수행 결과(성공 혹은 실패)를 보여주기 위해 string 형태가 올 것임을 정의한다.

db.js
export function deleteMovie(id) {
  const result =  movies.filter(movie => movie.id !== id)
  if (result.length !== movies.length) {
    movies = result
    return "successfully deleted"
  } else {
    return "id cannot found"
  }
}

db에 저장되어 있는 번호를 사용자가 입력한다면 해당 번호의 영화를 지울 수 있기 때문에 movies 배열을 재조정하고 성공했음을 리턴할 수 있다. 하지만 없는 번호를 입력하면 해당 번호의 영화를 지울 수 없기 때문에 삭제에 실패했음을 리턴할 수 있다.

resolvers.js
import { deleteMovie } from "../DB/db"

const resolvers = {
  Mutation: {
    deleteMovie: (_, { id }) =>  deleteMovie(id),
  }
}

export default resolvers

사용자의 입력값과 함께 addMovie 요청이 들어오면 db.js에서 정의한 대로 새로운 영화 객체를 만드는 작업을 수행한다.

profile
User First, Mobile Friendly

0개의 댓글