// db.js
let movies = [
{
id: 0,
name: "Star Wars",
score: 1,
},
{
id: 1,
name: "Avengers",
score: 8,
},
{
id: 2,
name: "Logan",
score: 2,
},
{
id: 3,
name: "The Godfather I",
score: 99,
},
];
export const getMovies = () => movies;
export const getById = (id) => {
const filteredMovies = movies.filter((movie) => movie.id === id);
return filteredMovies[0];
};
export const deleteMovie = (id) => {
const cleanedMovies = movies.filter((movie) => movie.id !== id);
if (movies.length > cleanedMovies.length) {
movies = cleanedMovies;
return true;
} else {
return false;
}
};
export const addMovie = (name, score) => {
const newMovie = {
id: `${movies.length + 1}`,
name,
score,
};
movies.push(newMovie);
return newMovie;
};
영화에 대해서 db 를 만들어보았다.
// resolvers.js
import { getMovies, getById, addMovie, deleteMovie } from "./db";
const resolvers = {
Query: {
movies: () => getMovies(),
movie: (_, { id }) => getById(id),
},
Mutation: {
addMovie: (_, { name, score }) => addMovie(name, score),
deleteMovie: (_, { id }) => deleteMovie(id),
},
};
export default resolvers;
resolvers 에 추가적으로 Mutation 을 정의해보았다.
참고로 Mutation 은 데이터베이스 상태가 변할 때 사용되는 것이다.
그러나 이대로 yarn start 를 하게 되면 resolvers 에는 정의되어 있지만 schema 에서는 정의되어 있지 않다고 뜬다. 그래서 스키마에도 정의해줄 것이다.
// schema.graphql
type Movie {
id: Int!
name: String!
score: Int!
}
type Query {
movies: [Movie]!
movie(id: Int!): Movie
}
type Mutation {
addMovie(name: String!, score: Int!): Movie!
deleteMovie(id: Int!): Boolean!
}
이제 GraphQL 에게 내 Mutation 이나 Query 를 요청하길 원한다면 그것들을 type Query 와 type Mutation 에 넣어야 한다.
addMovie 는 Movie 를 필수적으로 리턴하기 때문에 하위영역을 지정해주어야 하고,
deleteMovie 는 불린값을 리턴하기 때문에 이렇게만 지정해주면 된다.
정리
내가 어떤 함수를 가지고 있는지 필수사항은 뭔지 이런 것들은 그래프 큐엘에게서 제공된다.
장고는 이런 것들을 알려주지 않는다.
어떤 REST API 도 이런 것들을 알려주지 않는다.
지금까지 우리는 영화 정보를 받을 때 Query 를 했고
Database 의 상태를 바꾸기 위해서 Mutation 을 했다.
다음 시간에는 GraphQL 을 가지고 어떻게 REST API 를 감싸는지 배울 것이다.
왜냐하면 많은 개발자들이 GraphQL 을 사랑하지만 지금 가지고 있는 백엔드는 REST API 인 경우가 많기 때문
그래서 어떻게 감싸는지 보여주겠다.
'🌸 GraphQL' 카테고리의 다른 글
nexus 이해하기2 (공식문서 참고) (0) | 2022.02.26 |
---|---|
nexus 이해하기1 (공식문서 참고) (0) | 2022.02.26 |
GraphQL 로 영화 API 만들기(3) (2) | 2022.02.01 |
GraphQL 로 영화 API 만들기(2) (0) | 2022.01.30 |
GraphQL 로 영화 API 만들기(1) (0) | 2022.01.30 |