[NODEJS]Graphql-Mutation実装



Mutation
Graphqlは、いくつかの情報を受信するときに、Mutationを使用してQueryを追加、変更、削除します.
データ消去
複数のワークステーションの追加
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
  }
解析ワークステーションの追加
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がデータを削除したdeleteEquipmentをQueryではなくパラメータ値とした場合、削除したデータは返されます.

再度データの確認を依頼し、削除したデータが消えたことを確認できます.
データの追加
複数のワークステーションの追加
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
  }
解析ワークステーションの追加
// database.equipments 배열에 인자로 넘겨준 데이터를 push해준다. 그리고 추가해준 데이터를 반환해 준다.
Mutation: {
    insertEquipment: (parent,args,context,info) => {
        database.equipments.push(args)
        return args      
    },
  }

最初に所有していたデータを要求します.

各要素の値をパラメータとして送信します.

追加したデータが表示されているかどうかを確認するために、データの確認を再度要求します.
データの変更
複数のワークステーションの追加
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
  }
解析ワークステーションの追加
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]
    },
  }

最初に所有していたデータを要求します.

各要素の値をパラメータとして送信します.

再度データ確認を依頼し、修正したデータが見えることを確認します.