21 January 2019
Composable Commerce
HTTP API
Enhancement
GraphQLOrders

You can now update orders using the GraphQL schema.

  • [GraphQL API] Added the following types to the GraphQL schema: AddOrderDelivery, AddOrderItemShippingAddress, AddOrderParcelToDelivery, AddOrderPayment, AddOrderReturnInfo, ChangeOrderPaymentState, ChangeOrderShipmentState, ChangeOrderState, DeliveryItemDraftType, ImportOrderCustomLineItemState, ImportOrderLineItemState, ItemShippingDetailsDraftType, ItemStateDraftType, OrderCartCommand, OrderMyCartCommand, OrderUpdateAction, ParcelMeasurementsDraftType, RemoveOrderDelivery, RemoveOrderItemShippingAddress, RemoveOrderParcelFromDelivery, RemoveOrderPayment, ReturnItemDraftType, SetOrderBillingAddress, SetOrderCustomField, SetOrderCustomLineItemCustomField, SetOrderCustomLineItemCustomType, SetOrderCustomLineItemShippingDetails, SetOrderCustomType, SetOrderCustomerEmail, SetOrderCustomerId, SetOrderDeliveryAddress, SetOrderDeliveryItems, SetOrderLineItemCustomField, SetOrderLineItemCustomType, SetOrderLineItemShippingDetails, SetOrderLocale, SetOrderNumber, SetOrderParcelItems, SetOrderParcelMeasurements, SetOrderParcelTrackingData, SetOrderReturnPaymentState, SetOrderReturnShipmentState, SetOrderShippingAddress, ShippingTargetDraftType, TrackingDataDraftType, TransitionOrderCustomLineItemState, TransitionOrderLineItemState, TransitionOrderState, UpdateOrderItemShippingAddress, UpdateOrderSyncInfo.
  • [GraphQL API] Changed the Mutation type:
    • Added the updateOrder field to the Mutation type.
    • Added the createOrderFromCart field to the Mutation type.
    • Added the createMyOrderFromCart to the Mutation type.
    • Added the deleteOrder field to the Mutation type.

Introduced the following changes to the GraphQL schema (in SDL format):

extend type Mutation {
  createMyOrderFromCart(draft: OrderMyCartCommand!): Order
  createOrderFromCart(draft: OrderCartCommand!): Order
  deleteOrder(version: Long!, personalDataErasure: Boolean = false,

    "Queries with specified ID"
    id: String, orderNumber: String): Order
  updateOrder(version: Long!, actions: [OrderUpdateAction!]!,

    "Queries with specified ID"
    id: String, orderNumber: String): Order
}

input AddOrderDelivery {
  items: [DeliveryItemDraftType!] = []
  parcels: [DeliveryItemDraftType!] = []
  address: AddressInput
}

input AddOrderItemShippingAddress {
  address: AddressInput!
}

input AddOrderParcelToDelivery {
  deliveryId: String!
  measurements: ParcelMeasurementsDraftType
  trackingData: TrackingDataDraftType
  items: [DeliveryItemDraftType!] = []
}

input AddOrderPayment {
  payment: ResourceIdentifierInput!
}

input AddOrderReturnInfo {
  items: [ReturnItemDraftType!]!
  returnDate: DateTime
  returnTrackingId: String
}

input ChangeOrderPaymentState {
  paymentState: PaymentState!
}

input ChangeOrderShipmentState {
  shipmentState: ShipmentState!
}

input ChangeOrderState {
  orderState: OrderState!
}

input DeliveryItemDraftType {
  id: String!
  quantity: Long!
}

input ImportOrderCustomLineItemState {
  customLineItemId: String!
  state: [ItemStateDraftType!]!
}

input ImportOrderLineItemState {
  lineItemId: String!
  state: [ItemStateDraftType!]!
}

input ItemShippingDetailsDraftType {
  targets: [ShippingTargetDraftType!]!
}

input ItemStateDraftType {
  quantity: Long!
  state: ReferenceInput!
}

input OrderCartCommand {
  id: String!
  version: Long!
  paymentState: PaymentState
  orderState: OrderState
  state: ReferenceInput
  shipmentState: ShipmentState
  orderNumber: String
}

input OrderMyCartCommand {
  id: String!
  version: Long!
}

input OrderUpdateAction {
  addDelivery: AddOrderDelivery
  addItemShippingAddress: AddOrderItemShippingAddress
  addParcelToDelivery: AddOrderParcelToDelivery
  addPayment: AddOrderPayment
  addReturnInfo: AddOrderReturnInfo
  changeOrderState: ChangeOrderState
  changePaymentState: ChangeOrderPaymentState
  changeShipmentState: ChangeOrderShipmentState
  importCustomLineItemState: ImportOrderCustomLineItemState
  importLineItemState: ImportOrderLineItemState
  removeDelivery: RemoveOrderDelivery
  removeItemShippingAddress: RemoveOrderItemShippingAddress
  removeParcelFromDelivery: RemoveOrderParcelFromDelivery
  removePayment: RemoveOrderPayment
  setBillingAddress: SetOrderBillingAddress
  setCustomField: SetOrderCustomField
  setCustomLineItemCustomField: SetOrderCustomLineItemCustomField
  setCustomLineItemCustomType: SetOrderCustomLineItemCustomType
  setCustomLineItemShippingDetails: SetOrderCustomLineItemShippingDetails
  setCustomType: SetOrderCustomType
  setCustomerEmail: SetOrderCustomerEmail
  setCustomerId: SetOrderCustomerId
  setDeliveryAddress: SetOrderDeliveryAddress
  setDeliveryItems: SetOrderDeliveryItems
  setLineItemCustomField: SetOrderLineItemCustomField
  setLineItemCustomType: SetOrderLineItemCustomType
  setLineItemShippingDetails: SetOrderLineItemShippingDetails
  setLocale: SetOrderLocale
  setOrderNumber: SetOrderNumber
  setParcelItems: SetOrderParcelItems
  setParcelMeasurements: SetOrderParcelMeasurements
  setParcelTrackingData: SetOrderParcelTrackingData
  setReturnPaymentState: SetOrderReturnPaymentState
  setReturnShipmentState: SetOrderReturnShipmentState
  setShippingAddress: SetOrderShippingAddress
  transitionCustomLineItemState: TransitionOrderCustomLineItemState
  transitionLineItemState: TransitionOrderLineItemState
  transitionState: TransitionOrderState
  updateItemShippingAddress: UpdateOrderItemShippingAddress
  updateSyncInfo: UpdateOrderSyncInfo
}

input ParcelMeasurementsDraftType {
  heightInMillimeter: Int
  lengthInMillimeter: Int
  widthInMillimeter: Int
  weightInGram: Int
}

input RemoveOrderDelivery {
  deliveryId: String!
}

input RemoveOrderItemShippingAddress {
  addressKey: String!
}

input RemoveOrderParcelFromDelivery {
  parcelId: String!
}

input RemoveOrderPayment {
  payment: ResourceIdentifierInput!
}

input ReturnItemDraftType {
  quantity: Long!
  lineItemId: String
  customLineItemId: String
  comment: String
  shipmentState: ReturnShipmentState!
}

input SetOrderBillingAddress {
  address: AddressInput
}

input SetOrderCustomField {
  name: String!
  value: String
}

input SetOrderCustomLineItemCustomField {
  customLineItemId: String!
  name: String!
  value: String
}

input SetOrderCustomLineItemCustomType {
  customLineItemId: String!
  fields: [CustomFieldInput!]
  type: ResourceIdentifierInput
  typeKey: String
  typeId: String
}

input SetOrderCustomLineItemShippingDetails {
  customLineItemId: String!
  shippingDetails: ItemShippingDetailsDraftType
}

input SetOrderCustomType {
  fields: [CustomFieldInput!]
  type: ResourceIdentifierInput
  typeKey: String
  typeId: String
}

input SetOrderCustomerEmail {
  email: String
}

input SetOrderCustomerId {
  customerId: String
}

input SetOrderDeliveryAddress {
  deliveryId: String!
  address: AddressInput
}

input SetOrderDeliveryItems {
  deliveryId: String!
  items: [DeliveryItemDraftType!]!
}

input SetOrderLineItemCustomField {
  lineItemId: String!
  name: String!
  value: String
}

input SetOrderLineItemCustomType {
  lineItemId: String!
  fields: [CustomFieldInput!]
  type: ResourceIdentifierInput
  typeKey: String
  typeId: String
}

input SetOrderLineItemShippingDetails {
  lineItemId: String!
  shippingDetails: ItemShippingDetailsDraftType
}

input SetOrderLocale {
  locale: Locale
}

input SetOrderNumber {
  orderNumber: String
}

input SetOrderParcelItems {
  parcelId: String!
  items: [DeliveryItemDraftType!]!
}

input SetOrderParcelMeasurements {
  parcelId: String!
  measurements: ParcelMeasurementsDraftType
}

input SetOrderParcelTrackingData {
  parcelId: String!
  trackingData: TrackingDataDraftType
}

input SetOrderReturnPaymentState {
  returnItemId: String!
  paymentState: ReturnPaymentState!
}

input SetOrderReturnShipmentState {
  returnItemId: String!
  shipmentState: ReturnShipmentState!
}

input SetOrderShippingAddress {
  address: AddressInput
}

input ShippingTargetDraftType {
  addressKey: String!
  quantity: Long!
}

input TrackingDataDraftType {
  trackingId: String
  carrier: String
  provider: String
  providerTransaction: String
  isReturn: Boolean = false
}

input TransitionOrderCustomLineItemState {
  customLineItemId: String!
  quantity: Long!
  fromState: ResourceIdentifierInput!
  toState: ResourceIdentifierInput!
  actualTransitionDate: DateTime
}

input TransitionOrderLineItemState {
  lineItemId: String!
  quantity: Long!
  fromState: ResourceIdentifierInput!
  toState: ResourceIdentifierInput!
  actualTransitionDate: DateTime
}

input TransitionOrderState {
  state: ResourceIdentifierInput!
  force: Boolean = false
}

input UpdateOrderItemShippingAddress {
  address: AddressInput!
}

input UpdateOrderSyncInfo {
  channel: ResourceIdentifierInput!
  syncedAt: DateTime
  externalId: String
}