Apollo / GraphQl - O tipo deve ser o tipo de entrada

Chegar a todos vocês como eu estou no processo de aprendizado e integração do Apollo e graphQL em um dos meus projetos. Até agora está tudo bem, mas agora estou tentando ter algumas mutações e estou lutando com o tipo de entrada e o tipo de consulta. Sinto que é muito mais complicado do que deveria e, portanto, estou procurando conselhos sobre como devo gerenciar minha situação. Os exemplos que encontrei on-line são sempre com esquemas muito básicos, mas a realidade é sempre mais complexa, pois meu esquema é bastante grande e tem a seguinte aparência (copio apenas uma parte):

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

}

Então, entradas e cargas são definidas e assim por diante ...

Para isso, quero uma mutação para salvar o "Cálculo", portanto, no mesmo arquivo, tenho o seguinte:

type Mutation {
    saveCalculation(data: CalculationData!, name: String!): Calculation
}

Meu resolvedor é o seguinte:

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')
        }
    }
}

Então minha mutação é a seguinte: import gql from 'graphql-tag';

export const SAVE_CALCULATION = gql`
    mutation saveCalculation($data: CalculationData!, $name: String!){
        saveCalculation(data: $data, name: $name){
            _id
        }
    }
`

Finalmente, estou usando o componente Mutation para tentar salvar os dados:

<Mutation mutation={SAVE_CALCULATION}>
    {(saveCalculation, { data }) => (
        <div onClick={() => saveCalculation({ variables : { data: this.state, name:'name calcul' }})}>SAVE</div>
    }}
</Mutation>

Agora, recebo o seguinte erro:

[Erro do GraphQL]: Mensagem: O tipo de Mutation.saveCalculation (dados :) deve ser o Tipo de Entrada, mas obteve: CalculationData!., Local: undefined, Caminho: undefined

De minha pesquisa e algumas outras postagens de SO, entendi que eu deveria definir o tipo de entrada além do tipo de consulta, mas o tipo de entrada pode apenas avec tipos escalares, mas meu esquema depende de outros esquemas (e isso não é escalar). Posso criar tipos de entrada dependendo de outros tipos de entrada e assim por diante quando o último tiver apenas tipos escalares? Estou meio perdido porque parece muita redundância. Gostaria muito de receber algumas orientações sobre as melhores práticas. Estou convencido Apollo / graphql @ poderia me trazer uma ajuda muito boa ao longo do tempo no meu projeto, mas tenho que admitir que é mais complicado do que pensei em implementá-lo quando os esquemas são um pouco complexos. Exemplos online geralmente se ater a uma String e um Boolea

questionAnswers(2)

yourAnswerToTheQuestion