[NODEJS] Graphql - Mutation 구현

SEUNGJUN·2022년 3월 1일
0
post-thumbnail

Mutation

Graphql 어떤 정보를 받아올때는 Query를 그 정보들을 추가, 수정, 삭제 할때는 Mutation을 사용한다.

데이터 삭제

Mutation 추가

const typeDefs = gql`
  type Query {
    teams: [Team]
    equipments: [Equipment]
    supplies: [Supply]
    team(id: Int): [Team]
  }
  // Query 밑에 새로운 Mutation을 추가해 주고 deleteEquipment라는 루트를 추가해준다.
  // String 인자를 받는 id로 받고 Equipment를 반환해준다.
  type Mutation {
      deleteEquipment(id: String): Equipment
  }

resolvers Mutation 추가

Mutation: {
    deleteEquipment: (parent,args,context,info) => {
    //deleted 변수에 내가 검색한 id값과 database.equipments에 들어있는 id값과 동일하면
    //해당 데이터를 반환
        const deleted = database.equipments
            .filter((equipment) => {
                return args.id === equipment.id
            })[0]
    // filter를 통해서 내가 찾는id값과 다른 값들만 database.equipments에 새롭게 넣어준다.
        database.equipments = database.equipments
            .filter((equipment) => {
                return equipment.id !== args.id
        })
        return deleted
    }
  }

처음에 가지고 있던 데이터를 요청한다.

Root가 Query가 아니라 mutation에서 삭제할 데이터를 인자값으로 넣어준 deleteEquipment를 날려주게 되면 삭제된 해당 데이터가 반환이 된다.

다시 데이터를 요청해서 확인해보면 삭제한 데이터가 사라져있는것을 확인할수 있다.

데이터 추가

Mutation 추가

const typeDefs = gql`
  type Query {
    teams: [Team]
    equipments: [Equipment]
    supplies: [Supply]
    team(id: Int): [Team]
  }
  type Mutation {
      deleteEquipment(id: String): Equipment
      // 데이터를 추가하기 때문에 추가할 Equipment의 요소들을 인자값으로 받고 Equipment를 반환해준다.
      insertEquipment(
        id: String,
        used_by: String,
        count: Int,
        new_or_used: String
      ): Equipment
  }

resolvers Mutation 추가

// database.equipments 배열에 인자로 넘겨준 데이터를 push해준다. 그리고 추가해준 데이터를 반환해 준다.
Mutation: {
    insertEquipment: (parent,args,context,info) => {
        database.equipments.push(args)
        return args      
    },
  }

처음에 가지고 있던 데이터를 요청한다.

각 요소들의 값들을 인자로 넣어서 값을 보내준다.

다시 데이터를 요청해서 확인해보면 추가된 데이터가 보이는것을 확인할수 있다.

데이터 수정

Mutation 추가

const typeDefs = gql`
  type Query {
    teams: [Team]
    equipments: [Equipment]
    supplies: [Supply]
    team(id: Int): [Team]
  }
  type Mutation {
      deleteEquipment(id: String): Equipment
      // 수정할 데이터를 Equipment의 요소들의 인자값으로 받고 Equipment를 반환해준다.
      editEquipment(
        id: String,
        used_by: String,
        count: Int,
        new_or_used: String
      ): Equipment
  }

resolvers Mutation 추가

Mutation: {
    editEquipment: (parent, args, context, info) =>{
        return database.equipments.filter((equiment) => {
        // equiment id값과 찾으려고 하는 인자값에 id와 같은 값을찾아서
            return equiment.id === args.id
        }).map((equipment) => {
        // Object.assign을 이용해서 equipment와 args를 병합을 해준다.
            Object.assign(equipment, args)
            return equipment
        })[0]
    },
  }

처음에 가지고 있던 데이터를 요청한다.

각 요소들의 값들을 인자로 넣어서 값을 보내준다.

다시 데이터를 요청해서 확인해보면 수정된 데이터가 보이는것을 확인할수 있다.

profile
RECORD DEVELOPER

0개의 댓글