Как создать массив объектов в React для graphql - PullRequest
0 голосов
/ 06 августа 2020

Схема Graphql:

type SDKConfig @model 
  @key(name: "byPublisher", fields: ["publisher_id", "id"]){
  id: ID!
  publisher_id: ID!
  facebook_app_id: String

  adjust_app_token: String
}

type GameConfig @model
  @auth(rules: [
    {allow: owner},
    {allow: groups, groupsField: "groups"}]){
  id: ID!
  game_name: String!
  bundle_identifier: String!

  sdkConfigs: [SDKConfig] @connection(keyName: "byPublisher", fields: ["id"])
  groups: [String]
}

Мутации:

export const createGameConfig = /* GraphQL */ `
  mutation CreateGameConfig(
    $input: CreateGameConfigInput!
    $condition: ModelGameConfigConditionInput
  ) {
    createGameConfig(input: $input, condition: $condition) {
      id
      game_name
      bundle_identifier
      sdkConfigs {
        items {
          id
          publisher_id
          facebook_app_id
          adjust_app_token
          createdAt
          updatedAt
        }
        nextToken
      }
      groups
      createdAt
      updatedAt
      owner
    }
  }
`;

Функция React:

    async function createGame() {
      try {
        const newgame = { 
            "game_name": "deneme",
            "bundle_identifier": "com.magiclab.deneme",
            sdkConfigs: [
                {   "publisher_id": 5,
                    "facebook_app_id": "fb12313",
                    "adjust_app_token": "adjusttoken123123",
                }
            ] 
        }
        await API.graphql(graphqlOperation(createGameConfig, {input: newgame}))
      } catch (err) {
        console.log('error creating game sdk config:', err)
      }
    }

Сообщение об ошибке:

«Входные переменные содержат имя поля 'sdkConfigs', которое не определено для типа входного объекта 'CreateGameConfigInput'»

Я хочу создать массив объектов внутри объекта. Как исправить объект ввода для graphql?

1 Ответ

1 голос
/ 18 августа 2020

Вы должны запустить две разные мутации, одну для создания GameConfig и другую для создания SDKConfig, это будет примерно так

async function createGame() {
  try {
    const newgame = {
      game_name: 'deneme',
      bundle_identifier: 'com.magiclab.deneme',
    };
    const sdk = {
      publisher_id: null,
      facebook_app_id: 'fb12313',
      adjust_app_token: 'adjusttoken123123',
    };
    const {
      data: {
        createGameConfig: { id: publisher_id },
      },
    } = await API.graphql(
      graphqlOperation(createGameConfig, { input: newgame })
    );
    sdk.publisher_id = publisher_id;
    await API.graphql(graphqlOperation(createSDKConfig, { input: sdk }));
  } catch (err) {
    console.log('error creating game sdk config:', err);
  }
}

, тогда вы будете использовать идентификатор, возвращаемый первой мутацией, в качестве входных данных для второй мутации, этот идентификатор будет связывать эти две записи, и когда вы запрашиваете любой gameConfig, он вытянет в массиве любой SDKConfig, который их publisher_id совпадает с gameConfig.

Вы можете расширить эту информацию в этом разделе официальной документации https://docs.amplify.aws/cli/graphql-transformer/directives#belongs -to

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...