Apollo GraphQL 嵌套突变

Apollo GraphQL Nested Mutation

需要一些关于嵌套突变的帮助。

抽象的场景是这样的:

我想结合 apollo-server 上的 2 个突变调用,首先创建一个 Customer,然后为该客户创建一个 AddressAddress 突变需要一个 customerID 才能做到这一点,但也有来自它需要访问的原始整体突变的信息。

通用代码如下:

makeExecutableSchema({
  typeDefs: gql`
    type Mutation {
      createCustomerWithAddress(customer: CustomerRequest!, address: AddressRequest!): Response
    }
    input CustomerRequest {
       name: String!
    }

    input AddressRequest {
       address: String!
       city: String!
       state: String!
       country: String!
    }

    type Response {
       customerID: Int!
       addressID: Int!
    }
  `,
  resolvers: {
    Mutation: {
      createCustomerWithAddress: async (_, {customer}, context, info) => {
        return await api.someAsyncCall(customer);
      }
    },
    Response: {
      addressID: async(customerID) => {
        // how do we get AddressRequest here?
        return await api.someAsyncCall(customerID, address);
      }
    }
  }
})



我没有从原始代码中展示很多复杂性,但我想了解的只是如何通过子突变访问请求参数的根本,如果可能的话。我真的不想将 address 从顶级突变传递给子突变。

解析器中不需要 Response 字段。 createCustomerWithAddress 应该 return 形状像 Response.

的对象
resolvers: {
    Mutation: {
      createCustomerWithAddress: async (_, {customer, address}, context, info) => {
        // create customer
        const customerId = await api.CreateCustomer(customer);
        // create address and assign customerId
        const addressId = await api.CreateAddress({ ...address, customerId });
        // return response
        return { customerId, addressId };
      }
    },
  }