AWS Amplify не генерирует правильную входную глубину graphql - PullRequest
1 голос
/ 20 мая 2019

Я новичок в графике и AWS Amplify, поэтому, пожалуйста, прости меня за невежество :)

У меня есть схема graphql, подобная этой:

type Location @model @auth(rules: [{allow: owner}]){
  street: String
  city: String
  state: String
  zip: String
}

type Trip @model @auth(rules: [{allow: owner}]){
  id: String!
  ...
  location: Location
}

Я пытаюсь создать местоположение и поездку одновременно с запросом на мутацию, подобным этому:

mutation {
  createTrip(input: {
      id: "someIdentifier",
      location: {
        street: "somewhere"
      }
  }) {
      id
      location {
        street
      }
  }
}

Но я получаю сообщение об ошибке, подобное этому:

{
  "data": null,
  "errors": [
    {
      "path": null,
      "locations": [
        {
          "line": 2,
          "column": 21,
          "sourceName": null
        }
      ],
      "message": "Validation error of type WrongType: argument 'input' with value '...' contains a field not in 'CreateTripInput': 'location' @ 'createTrip'"
    }
  ]
}

Проверяя сгенерированный файл schema.graphql, я вижу, что на входной модели действительно нет объекта location:

input CreateTripInput {
  id: String!
  ...
}

Как можно с помощью команды ampify создать правильную схему ввода, чтобы я мог одновременно создавать объекты Trip и Location?

1 Ответ

0 голосов
/ 21 мая 2019

Я смог получить ответ от команды AWS-Ampify здесь . Подведем итог:

Обе поездки и местоположение имеют директиву model. Нет директивы @connection, связывающей Trip с Location. Существует два варианта «разрешения»:

Обновите схему, соединяющую модели, если вы хотите, чтобы они находились в 2 отдельных таблицах, и хотите иметь возможность запрашивать отключение на основе местоположения. Используя две отдельные таблицы, вы не сможете создать и Trip, и Location в одной мутации. Например:

type Location @model @auth(rules: [{allow: owner}]){
  street: String
  city: String
  state: String
  zip: String
  trips: Trip @connection(name:"TripLocation")
}

type Trip @model @auth(rules: [{allow: owner}]){
  id: String!
  location: Location @connection(name:"TripLocation")
}

Второй вариант, если данные Location очень специфичны для поездки и вы не хотите создавать отдельную таблицу, тогда избавьтесь от директивы @model из вашего типа Location. Это позволит вам создать Location как часть той же мутации.

type Location {
  street: String
  city: String
  state: String
  zip: String

}

type Trip @model @auth(rules: [{allow: owner}]){
  id: String!
  location: Location
}

Позже я решил, с каким решением двигаться дальше.

...