Обращаюсь ко всем вам в процессе обучения и интеграции Apollo и graphQL в один из моих проектов.Пока все идет хорошо, но сейчас я пытаюсь получить некоторые мутации и борюсь с типом ввода и типом запроса.Я чувствую, что все гораздо сложнее, чем должно быть, и поэтому я ищу совет о том, как мне справиться с ситуацией.Примеры, которые я нашел в Интернете, всегда содержат очень простые схемы, но реальность всегда более сложна, так как моя схема довольно большая и выглядит следующим образом (я скопирую только часть):
type Calculation {
_id: String!
userId: String!
data: CalculationData
lastUpdated: Int
name: String
}
type CalculationData {
Loads: [Load]
validated: Boolean
x: Float
y: Float
z: Float
Inputs: [Input]
metric: Boolean
}
Тогда входы и нагрузкиопределены, и так далее ...
Для этого я хочу, чтобы мутация, чтобы сохранить "Расчет", поэтому в том же файле у меня есть это:
type Mutation {
saveCalculation(data: CalculationData!, name: String!): Calculation
}
Мой распознаватель какследуйте:
export default resolvers = {
Mutation: {
saveCalculation(obj, args, context) {
if(context.user && context.user._id){
const calculationId = Calculations.insert({
userId: context.user._id,
data: args.data,
name: args.name
})
return Calculations.findOne({ _id: calculationId})
}
throw new Error('Need an account to save a calculation')
}
}
}
Тогда моя мутация следующая: import gql из 'graphql-tag';
export const SAVE_CALCULATION = gql`
mutation saveCalculation($data: CalculationData!, $name: String!){
saveCalculation(data: $data, name: $name){
_id
}
}
`
Наконец, я использую компонент Mutation, чтобы попытаться сохранить данные:
<Mutation mutation={SAVE_CALCULATION}>
{(saveCalculation, { data }) => (
<div onClick={() => saveCalculation({ variables : { data: this.state, name:'name calcul' }})}>SAVE</div>
}}
</Mutation>
Теперь я получаю следующую ошибку:
[Ошибка GraphQL]: Сообщение: тип Mutation.saveCalculation (data :) должен иметь тип ввода, но должен быть получен: CalculationData!., Местоположение: не определено, Путь: не определено
Из моего исследования и некоторых других сообщений SO я понял, что должен определить тип ввода в дополнение к типу запроса, но тип ввода может содержать только скалярные типыно моя схема зависит от других схем (и это нет скаляр).Могу ли я создавать типы ввода в зависимости от других типов ввода и т. Д., Когда последний имеет только скалярные типы?Я в некотором роде потерян, потому что это выглядит как избыточность.Буду очень признателен за некоторые рекомендации по лучшей практике.Я убежден, что Apollo / graphql со временем может оказать мне довольно хорошую помощь в моем проекте, но я должен признать, что это сложнее, чем я думал, чтобы реализовать его, когда схемы немного сложны.В онлайн-примерах обычно используются строки и логические значения.