Вложенные типы в модели Graphcool - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь добавить вложенную структуру данных в модель в Graph.cool , но я не могу на всю жизнь, если я пойму, как.

По сути, этовот чего я хочу достичь:

type Invoice @model {
  id: ID! @isUnique
  user: Int!
  createdAt: DateTime!
  items: [LineItem!]!
}

type LineItem {
  # Product is defined elsewhere and is unrelated to the problem
  product: Product! @relation(name: "InvoiceProduct")!
  amount: Int!
}

Приведенный выше код работал (см. этот ответ SO для справки https://stackoverflow.com/a/50784501/641755), но при развертывании с помощью инструмента командной строки появляется эта ошибка $ The model 'LineItem' is missing the @model directive. Please add it. See: https://github.com/graphcool/framework/issues/817 ... Эта ссылка на github устарела.

Однако я обнаружил, что https://github.com/prisma/prisma/issues/817. @model теперь требуется для всех типов. Это означает, что тип должен иметь идентификатор, и мне нужно установитьотношения между Invoice и LineItem. Хорошо, это означает, что мы в конечном итоге:

type Invoice @model {
  id: ID! @isUnique
  createdAt: DateTime!
  user: Int!
  items: [LineItem!]! @relation(name: "InvoiceLineItem")
}

type LineItem @model {
  id: ID! @isUnique
  product: Product! @relation(name: "InvoiceProduct")!
  amount: Int!
  invoice: Invoice! @relation(name: "InvoiceLineItem")
}

Теперь, это проблема из-за нескольких причин

  1. Если мой счет содержит 50 позиций, мне нужно сначала создать все из них. Я не могу просто отправить часть позиций полезной нагрузки запроса для мутации Invoice.
  2. Я получаю таблицу LineItem в базе данныхчто я абсолютно бесполезен.

Все, что я хочу, это возможность отправлятьe следующая полезная нагрузка:

// Invoice
{
  user: 123,
  items: [
    {
      product: "*id*"
      amount: 3
    },
    {
      product: "*id*"
      amount: 5
    }
  ]
}

Я вижу, что Graph.cool имеет тип Json , поэтому, я думаю, я мог бы вручную JSON.stringify() элементы счета и сохранять их таким образом, ноозначает, что я не получаю проверки полей на стороне сервера вообще, и я действительно предпочел бы не получить такое решение.

Любые идеи, предложения или советы будут высоко оценены.

...