Как в мутации GraphQL передать массив в поле с помощью FaunaDB

Я не думаю, что делаю что-то должным образом с помощью graphQL, но я не уверен, как этого добиться с помощью graphQL.

У меня есть следующая схема, которая затем загружается в FaunaDB, и они делают магию, чтобы превратить ее в пригодную для использования конечную точку api graphQL.

type Catalog {
  decor: Boolean
  clothing: Boolean
  supplies: Boolean
  furniture: Boolean
  owner: User
}

type Decor {
  description: String
  pieces: Int
  purchaser: String
  alterations: Boolean
  cost: Int
  purchaseDate: Date
  category: String
  image: String
  itemNum: Int
  owner: User!
  visible: Boolean
}

type DecorSheet {
  sheetName: String
  refIdArray: String
  owner: User!
}

type User {
  email: String! @unique
  catalog: Catalog
  decor: [Decor!] @relation
  decorSheet: [DecorSheet!] @relation
}

type Query {
  getMultipleDecors(DecorId: [ID!]): [Decor]
    @resolver(name: "get_multiple_decors")
}

Мне нужно создать тип DecorSheet, мне нужен refIdArray, чтобы он был массивом таких объектов

[
    {
        "refId0": "293164663883956749"
    },
    {
        "refId1": "293526016787218952"
    }
]

У меня есть следующая мутация gql для запуска apollo

const CREATE_DECOR_SHEET = gql`
  mutation CreateDecorSheet(
    $ownerID: ID!
    # $description: String!
    $sheetName: String
    $refIdArray: String!
  ) {
    createDecorSheet(data: { sheetName: $sheetName, refIdArray: $refIdArray, owner: { connect: $ownerID } }) {
      refIdArray
      sheetName
      _id
    }
  }
`;

и я звоню сюда

const res = await createDecorSheet({
      variables: {
        ownerID: user.id,
        // ...dataMassage,
        sheetName: dataForm.sheetName,
        refIdArray: JSON.stringify(chosenValues), //A WAY TO DO THIS GRAPHQL STYLE
      },
    }).catch(console.error);

Смотрите, в настоящее время я привязываю selectedValues ​​к тем же значениям, которые я перечислил выше для объектов refId и Id в массиве.

Есть ли лучший способ сделать это, нужно ли мне написать настраиваемую мутацию, чтобы вы могли передать массив объектов в refIdArray.

Если бы кто-нибудь мог помочь с этим, это было бы здорово.

Спасибо


person Anders Kitson    schedule 25.03.2021    source источник
comment
просто передайте массив идентификаторов, как в запросе ... это роль преобразователя, чтобы адаптировать входные данные к требованиям БД (скрытая реализация) или `` извлечь '' в требуемую форму данных   -  person xadm    schedule 26.03.2021
comment
Значит, вы можете передать массив идентификаторов в виде строкового значения? это тоже не кажется мне правильным, но я постараюсь. Я думаю, он будет жаловаться мне, что это не строковое значение. Я отчитаюсь   -  person Anders Kitson    schedule 26.03.2021
comment
Я получил Variable '$refIdArray' expected value of type 'String!' but got: ["293164663883956749","293526016787218952"] Нужно ли менять схему на refIdArray: [id]   -  person Anders Kitson    schedule 26.03.2021
comment
Хорошо, это сработало. Спасибо   -  person Anders Kitson    schedule 26.03.2021
comment
@AndersKitson Вы, вероятно, должны написать свой собственный ответ с решением, тогда оно определенно поможет другим! :)   -  person Vadorequest    schedule 27.03.2021


Ответы (1)


В итоге я обновил схему до

type DecorSheet {
  sheetName: String
  refIdArray: [ID]
  owner: User!
}

Затем я просто передал свой массив как есть

const res = await createDecorSheet({
        variables: {
       ownerID: user.id,
          // ...dataMassage,
          sheetName: dataForm.sheetName,
          refIdArray: chosenValues, //array here
        },
      }).catch(console.error);

и мутация gql выглядела так

 const CREATE_DECOR_SHEET = gql`
    mutation CreateDecorSheet(
      $ownerID: ID!
      # $description: String!
      $sheetName: String
      $refIdArray: [ID]
    ) {
      createDecorSheet(
        data: {
          sheetName: $sheetName
          refIdArray: $refIdArray
          owner: { connect: $ownerID }
        }
      ) {
        refIdArray
        sheetName
        _id
      }
    }
  `;
person Anders Kitson    schedule 28.03.2021