[Graph QL] GraphQL Schema - 데이터 생성 및 삭제하기
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에서 정의한 대로 새로운 영화 객체를 만드는 작업을 수행한다.
댓글남기기