여기서 Query와 Mutation을 선언한다
Query
Mutation
이름이 string / isrequred 인 정보를 받는다는 뜻
이 파일에서 data가 어떻게 보일 지 정의한다. (database schema정의하는 거랑 비슷)
type Query {
name: String!
}
const resolvers = {
Query: {
name: () => "nicolas", // 함수의 첫번째 인자는 Object이다.
},
};
export default resolvers;
- index.js
```jsx
import { GraphQLServer } from "graphql-yoga";
import resolvers from "./graphql/resolvers.js";
const server = new GraphQLServer({
typeDefs: "./graphql/schema.graphql",
resolvers,
});
server.start(() => console.log("Graphql Server Running"));
```
export const people = [
{
id: "0",
name: "Nicolas",
age: 18,
gender: "female",
},
{
id: "1",
name: "Jisu",
age: 18,
gender: "female",
},
{
id: "2",
name: "Japan Guy",
age: 18,
gender: "male",
},
];
export const getMyId = id => {
const filteredPeople = people.filter(person => person.id === String(id));
return filteredPeople[0];
};
type Person {
id: Int!
name: String!
age: Int!
gender: String!
}
type Query {
people: [Person]!
person(id: Int!): Person
}
people
import { people, getMyId } from "./db.js";
const resolvers = {
Query: {
people: () => people,
person: (_, { id }) => getMyId(id), //두번쩨 argumnet를 console에 찍어보면
// {id:~}라고 나옴
},
};
export default resolvers;
query {
people {
age
name
}
}
위의 내용을 치면 아래의 data를 보여준다resolver 함수에서 설정한것처럼 people을 보여준다.
{
"data": {
"people": [
{
"age": 18,
"name": "Nicolas"
},
{
"age": 18,
"name": "Jisu"
},
{
"age": 18,
"name": "Japan Guy"
}
]
}
}
{
person(id:1) {
name
}
}
위의 내용을 치면 아래의 data를 보여준다resolver함수에서 설정한 것과 같이 인자로 넣은id를 가진 person을 찾아준다.
{
"data": {
"person": {
"name": "Jisu"
}
}
}
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!
}
resolvers.js
import { getMovies, getById, addMovie, deleteMovie } from "./db.js";
const resolvers = {
Query: {
movies: () => getMovies(),
movie: (_, { id }) => getById(id),
},
Mutation: {
addMovie: (_, { name, score }) => addMovie(name, score),
deleteMovie: (_, { id }) => deleteMovie(id),
},
};
export default resolvers;
db.js
export const getMovies = () => {
return 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;
};