본문 바로가기

BackEnd/GraphQL

GraphQL 시작하기(2)

GraphQL 시작하기 1에서 GET 위주의 기능만을 살펴봤다.

 

이번에는 나머지 CRUD에서 CREATE UPDATE DELETE가 어떤 식으로 동작하는지 살펴보자.

 

 

스키마에 자료를 변경해야 하는 상황에서는 Query대신 Mutation이라는 타입에 선언한다.

type Person {
  id: Int!
  name: String!
  age: Int!
  gender: String
}

type Query {
  people: [Person]!
  onePerson(id: Int!): Person
}

type Mutation {
  addUser(name: String!, age: Int!, gender: String!): Person
  deleteUser(id: Int!): Boolean!
}

다음은 addUser를 선언하고 이는 Person을 반환한다. 또한 deleteUser는 Boolean타입을 반환한다.

import { getById, getUser, deleteUser, addUser } from "../db/db";

const resolvers = {
  Query: {
    people: () => getUser(),
    onePerson: (_, args) => {
      return getById(args.id);
    }
  },
  Mutation: {
    addUser: (_, { name, age, gender }) => {
      return addUser(name, age, gender);
    },
    deleteUser: (_, id) => {
      return deleteUser(id.id);
    }
  }
};

export default resolvers;

Resolver에서는 Mutation을 선언하고 addUser와 deleteUser를 실제로 생성하고 이는 곧 각각의 함수를 반환한다.

함수는 수동으로 값을 변경하는 편인거 같다.

let people = [
  {
    id: 1,
    name: () => `Moon`,
    age: () => `18`,
    gender: () => `male`
  },
  {
    id: 5,
    name: () => `Emma`,
    age: () => `33`,
    gender: () => `female`
  }
];

export const getUser = () => people;

export const getById = id => {
  const filteredPeople = people.filter(person => id === person.id);
  return filteredPeople[0];
};

export const deleteUser = id => {
  const filteredPeople = people.filter(person => person.id !== id);
  people = filteredPeople;
  return true;
};

export const addUser = (name, age, gender) => {
  const newUser = {
    id: people.length + 1,
    name,
    age,
    gender
  };
  people.push(newUser);
  return newUser;
};

이때 삭제의 경우 filter를 통해 새로운 배열을 만드는 것은 상당히 충격적..

'BackEnd > GraphQL' 카테고리의 다른 글

GraphQL 시작하기(1)  (0) 2019.05.08