All Release Notes
Added GraphQL support for multiple shipping methods
31 January 2023
Composable Commerce
HTTP API
Enhancement
CartsOrdersGraphQL
To align with the HTTP API, multiple Shipping Methods are now supported on Carts and Orders in the GraphQL API.

Changes:

  • [GraphQL API] Added the following types to the GraphQL schema: AddCartCustomShippingMethod, AddCartShippingMethod, CustomShippingDraft, MethodTaxRate, RemoveCartShippingMethod, Shipping, ShippingDraft, ShippingMode.
  • [GraphQL API] Changed the MyCartDraft type:
    • Input field shippingMode was added to MyCartDraft type
    • Input field customShipping was added to MyCartDraft type
    • Input field shipping was added to MyCartDraft type
  • [GraphQL API] Changed the CartDraft type:
    • Input field customShipping was added to CartDraft type
    • Input field shipping was added to CartDraft type
    • Input field shippingMode was added to CartDraft type
  • [GraphQL API] Changed the CartUpdateAction type:
    • Input field addCustomShippingMethod was added to CartUpdateAction type
    • Input field removeShippingMethod was added to CartUpdateAction type
    • Input field addShippingMethod was added to CartUpdateAction type
  • [GraphQL API] Changed the Cart type:
    • Added the taxedShippingPrice field to the Cart type.
    • Added the shipping field to the Cart type.
    • Added the shippingMode field to the Cart type.
  • [GraphQL API] Changed the Order type:
    • Added the taxedShippingPrice field to the Order type.
    • Added the shipping field to the Order type.
    • Added the shippingMode field to the Order type.
  • [GraphQL API] Changed the LineItem type:
    • Added the perMethodTaxRate field to the LineItem type.
    • Added the taxedPricePortions field to the LineItem type.
  • [GraphQL API] Changed the ShippingTargetDraft type:
    • Added the shippingMethodKey field to the ShippingTargetDraft type.

The following changes were introduced in terms of GraphQL SDL:

extend type Cart {
  shipping: [Shipping!]!
  shippingMode: ShippingMode!
  taxedShippingPrice: TaxedPrice
}

extend type Order {
  shipping: [Shipping!]!
  shippingMode: ShippingMode!
  taxedShippingPrice: TaxedPrice
}

extend type LineItem {
  perMethodTaxRate: [MethodTaxRate!]!
  taxedPricePortions: [MethodTaxedPrice!]!
}

extend input MyCartDraft {
  customShipping: [CustomShippingDraft!] = []
  shipping: [ShippingDraft!] = []
  shippingMode: ShippingMode = Single
}

extend input CartDraft {
  customShipping: [CustomShippingDraft!] = []
  shipping: [ShippingDraft!] = []
  shippingMode: ShippingMode = Single
}

extend input CartUpdateAction {
  addCustomShippingMethod: AddCartCustomShippingMethod
  addShippingMethod: AddCartShippingMethod
  removeShippingMethod: RemoveCartShippingMethod
}

extend input ShippingTargetDraft {
  shippingMethodKey: String
}

input AddCartCustomShippingMethod {
  shippingKey: String!
  shippingMethodName: String!
  shippingAddress: AddressInput!
  shippingRate: ShippingRateDraft!
  shippingRateInput: ShippingRateInputDraft
  taxCategory: ResourceIdentifierInput
  externalTaxRate: ExternalTaxRateDraft
  custom: CustomFieldsDraft
  deliveries: [DeliveryDraft!] = []
}

input AddCartShippingMethod {
  shippingKey: String!
  shippingMethod: ResourceIdentifierInput!
  externalTaxRate: ExternalTaxRateDraft
  shippingAddress: AddressInput!
  shippingRateInput: ShippingRateInputDraft
  custom: CustomFieldsDraft
  deliveries: [DeliveryDraft!] = []
}

input CustomShippingDraft {
  key: String!
  shippingMethodName: String!
  shippingAddress: AddressInput!
  shippingRate: ShippingRateDraft!
  shippingRateInput: ShippingRateInputDraft
  taxCategory: ReferenceInput
  externalTaxRate: ExternalTaxRateDraft
  deliveries: [DeliveryDraft!]
  custom: CustomFieldsDraft
}

type MethodTaxRate {
  shippingMethodKey: String!
  taxRate: TaxRate
}

input RemoveCartShippingMethod {
  shippingKey: String!
}

type Shipping {
  shippingKey: String
  shippingInfo: ShippingInfo
  shippingAddress: Address
  shippingRateInput: ShippingRateInput
  shippingCustomFields: CustomFieldsType
}

input ShippingDraft {
  key: String!
  shippingMethod: ResourceIdentifierInput
  shippingAddress: AddressInput!
  shippingRateInput: ShippingRateInputDraft
  externalTaxRate: ExternalTaxRateDraft
  deliveries: [DeliveryDraft!]
  custom: CustomFieldsDraft
}

enum ShippingMode {
  "Allows multiple shipping methods for the cart with their respective shipping addresses"
  Multiple

  "Allows only one shipping method and shipping address for the cart"
  Single
}