Я пытаюсь добавить вложенную структуру данных в модель в 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")
}
Теперь, это проблема из-за нескольких причин
- Если мой счет содержит 50 позиций, мне нужно сначала создать все из них. Я не могу просто отправить часть позиций полезной нагрузки запроса для мутации Invoice.
- Я получаю таблицу LineItem в базе данныхчто я абсолютно бесполезен.
Все, что я хочу, это возможность отправлятьe следующая полезная нагрузка:
// Invoice
{
user: 123,
items: [
{
product: "*id*"
amount: 3
},
{
product: "*id*"
amount: 5
}
]
}
Я вижу, что Graph.cool имеет тип Json , поэтому, я думаю, я мог бы вручную JSON.stringify()
элементы счета и сохранять их таким образом, ноозначает, что я не получаю проверки полей на стороне сервера вообще, и я действительно предпочел бы не получить такое решение.
Любые идеи, предложения или советы будут высоко оценены.