java.lang.Object
com.broadleafcommerce.cartoperation.service.provider.external.AbstractExternalProvider
com.broadleafcommerce.cartoperation.service.provider.external.ExternalCartProvider
All Implemented Interfaces:
CartProvider

public class ExternalCartProvider extends AbstractExternalProvider implements CartProvider
Author:
Chad Harchar (charchar), Nathan Moore (nathandmoore)
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    protected static class 
     
  • Field Summary

    Fields inherited from class com.broadleafcommerce.cartoperation.service.provider.external.AbstractExternalProvider

    ENTITY_NOT_FOUND
  • Constructor Summary

    Constructors
    Constructor
    Description
    ExternalCartProvider(org.springframework.web.reactive.function.client.WebClient webClient, com.fasterxml.jackson.databind.ObjectMapper objectMapper, com.broadleafcommerce.common.extension.TypeFactory typeFactory, ExternalCartProperties properties, CartHolder<com.broadleafcommerce.cart.client.domain.Cart> requestCartHolder)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    cartConflict(Integer requestCartVersion, String cartId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, org.springframework.web.reactive.function.client.WebClientResponseException.Conflict conflictException)
    Builds an exception when a CONFLICT exception is thrown from the Cart Service, indicating that an optimistic lock failure occurred.
    com.broadleafcommerce.cart.client.domain.Cart
    createCart(@NonNull com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Create a new cart.
    com.broadleafcommerce.cart.client.domain.Cart
    createNonRequestCart(@NonNull com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Create a new cart, without updating the original request cart.
    void
    deleteCartItem(String cartId, com.broadleafcommerce.cart.client.domain.CartItem cartItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Delete the cart item.
    protected int
    findCartItemIndex(com.broadleafcommerce.cart.client.domain.Cart cart, String itemId)
    Finds the index at which the cart item with the given ID is at.
    protected Map<String,Object>
     
    protected String
     
    protected String
     
    com.broadleafcommerce.cart.client.domain.Cart
    patchCart(@NonNull com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Patch the cart.
    protected com.broadleafcommerce.cart.client.domain.Cart
    populateCurrency(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
     
    protected com.broadleafcommerce.cart.client.domain.Cart
    resolveCartFromConflict(org.springframework.web.reactive.function.client.WebClientResponseException.Conflict conflict)
    Attempts to extract a fresh version of the cart from the CONFLICT error's response body.
    protected Optional<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveCart(String retrieveCartUrl, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Method for retrieving a single, optional cart.
    protected com.broadleafcommerce.cart.client.domain.Cart
    retrieveCartAfterConflict(String cartId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Retrieves the latest version of the cart following a conflict error if possible.
    Optional<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveCartById(String cartId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Retrieve the cart.
    Optional<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveCartByOrderNumber(String customerId, String orderNumber, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Find the cart (if it exists) for the provided customer id and order number.
    Optional<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveCartByStatus(String customerId, String accountId, String status, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Finds a customer or account cart with the given status, customer cart will automatically be retrieved if the given accountId is null.
    Optional<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveCartByStatusAndName(String customerId, String status, String name, String accountId, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Finds a customer or account cart with the given status, customer cart will automatically be retrieved if the given accountId is null.
    org.springframework.data.domain.Page<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveCarts(cz.jirutka.rsql.parser.ast.Node filters, org.springframework.data.domain.Pageable pageable, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Retrieves a Page of Carts based on the given filters.
    org.springframework.data.domain.Page<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveCartsByStatuses(String customerId, String accountId, Set<String> statuses, org.springframework.data.domain.Pageable pageable, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Retrieves a Page of customer or account Carts based on the given statuses, customer id, and account id.
    org.springframework.data.domain.Page<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveCartsMatchingTenantByStatus(String status, org.springframework.data.domain.Pageable pageable, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Retrieves a Page of Carts based on the given status and matching the tenant from the given ContextInfo.
    Optional<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveHistoricalCartForAnonymousCustomer(String emailAddress, String orderNumber, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Finds a single, historical cart for an anonymous customer.
    SimplePage<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveHistoricalCartsForCustomer(String customerId, Date startDate, Date endDate, org.springframework.data.domain.Pageable page, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Find all carts that are DefaultCartStatuses.SUBMITTED or DefaultCartStatuses.CANCELLED for the provided customer and dates.
    org.springframework.data.domain.Page<com.broadleafcommerce.cart.client.domain.Cart>
    retrieveMyCarts(@NonNull com.broadleafcommerce.order.common.domain.CustomerRef customer, cz.jirutka.rsql.parser.ast.Node filters, org.springframework.data.domain.Pageable pageable, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Retrieves a Page of Carts based on the given filters.
    void
    sendCartPendingPaymentFailedEvent(@NonNull CartPendingPaymentFailedEvent cartPendingPaymentFailedEvent, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Sends the cart pending payment failed event to the cart service.
    void
    sendCartRejectionEvent(@NonNull CartRejectionEvent cartRejectionEvent, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Sends the cart rejection event to the cart service.
    void
    sendCheckoutCompletionEvent(CheckoutCompletionEvent checkoutCompletionEvent, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Sends the checkout completion event to the cart service.
    void
    sendRollbackEvent(CheckoutRollbackEvent rollbackEvent, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Sends the rollback event to the cart service.
    protected void
    syncItemToCart(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.cart.client.domain.CartItem cartItem)
    Takes changes made from an update to a single item and applies them to the cart and items in it.
    com.broadleafcommerce.cart.client.domain.Cart
    updateCart(@NonNull com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Update the cart.
    com.broadleafcommerce.cart.client.domain.Cart
    updateCart(@NonNull UpdateCartRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Update the cart.
    com.broadleafcommerce.cart.client.domain.CartItem
    updateCartItem(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.cart.client.domain.CartItem cartItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Update the cart item.
    List<com.broadleafcommerce.cart.client.domain.Cart>
    updateCartsMatchingTenantStatus(List<String> cartIds, String status, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    Updates the Cart.getStatus() for the given cart ids and status and matching the tenant from the given ContextInfo.
    protected com.broadleafcommerce.cart.client.domain.Cart
    updateRequestCart(com.broadleafcommerce.cart.client.domain.Cart cart)
    This updates the cart for the current request with a recently received version from the cart service.

    Methods inherited from class com.broadleafcommerce.cartoperation.service.provider.external.AbstractExternalProvider

    buildNotFoundException, executeRequest, getHeaders, getObjectMapper, getTypeFactory, getWebClient, isEntityNotFound, pageableToParams, uriVars

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface com.broadleafcommerce.cartoperation.service.provider.CartProvider

    retrieveCartsInStatus, retrieveCsrOwnedCart, retrieveCsrOwnedCart, retrieveCustomerCartByStatus, retrieveInProcessCart, retrieveInProcessCart
  • Constructor Details

    • ExternalCartProvider

      public ExternalCartProvider(org.springframework.web.reactive.function.client.WebClient webClient, com.fasterxml.jackson.databind.ObjectMapper objectMapper, com.broadleafcommerce.common.extension.TypeFactory typeFactory, ExternalCartProperties properties, CartHolder<com.broadleafcommerce.cart.client.domain.Cart> requestCartHolder)
  • Method Details

    • retrieveCarts

      public org.springframework.data.domain.Page<com.broadleafcommerce.cart.client.domain.Cart> retrieveCarts(cz.jirutka.rsql.parser.ast.Node filters, @Nullable org.springframework.data.domain.Pageable pageable, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Retrieves a Page of Carts based on the given filters.
      Specified by:
      retrieveCarts in interface CartProvider
      Parameters:
      filters - the filters to apply
      pageable - the requested page of results
      contextInfo - context information related to multitenancy
      Returns:
      a Page of Carts based on the given filters
    • retrieveMyCarts

      public org.springframework.data.domain.Page<com.broadleafcommerce.cart.client.domain.Cart> retrieveMyCarts(@NonNull @NonNull com.broadleafcommerce.order.common.domain.CustomerRef customer, @Nullable cz.jirutka.rsql.parser.ast.Node filters, @Nullable org.springframework.data.domain.Pageable pageable, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Retrieves a Page of Carts based on the given filters.
      Specified by:
      retrieveMyCarts in interface CartProvider
      filters - the filters to apply
      pageable - the requested page of results
      contextInfo - context information related to multitenancy
      Returns:
      a Page of Carts based on the given filters
    • retrieveCartsByStatuses

      public org.springframework.data.domain.Page<com.broadleafcommerce.cart.client.domain.Cart> retrieveCartsByStatuses(String customerId, @Nullable String accountId, Set<String> statuses, @Nullable org.springframework.data.domain.Pageable pageable, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Retrieves a Page of customer or account Carts based on the given statuses, customer id, and account id. Customer cart will automatically be retrieved if the given accountId is null.
      Specified by:
      retrieveCartsByStatuses in interface CartProvider
      Parameters:
      customerId - the id of the customer that owns the Carts
      accountId - the id of the account that the Carts belong to, null can be passed in to retrieve customer Carts
      statuses - cart statuses to find the Carts by
      pageable - the requested page of results
      contextInfo - context information related to multitenancy
      Returns:
      a Page of customer or account Carts based on the given statuses, customer id, and account id
    • retrieveCartByStatus

      public Optional<com.broadleafcommerce.cart.client.domain.Cart> retrieveCartByStatus(String customerId, @Nullable String accountId, String status, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Finds a customer or account cart with the given status, customer cart will automatically be retrieved if the given accountId is null.

      The cart with the latest Cart.getCreateDate() is retrieved if there're multiple Carts.

      Specified by:
      retrieveCartByStatus in interface CartProvider
      Parameters:
      customerId - the customer ID
      accountId - the account ID, null can be passed in to retrieve customer cart
      status - the status
      contextInfo - the context info
      Returns:
      a cart if it exists
    • retrieveCartByStatusAndName

      public Optional<com.broadleafcommerce.cart.client.domain.Cart> retrieveCartByStatusAndName(String customerId, String status, @Nullable String name, @Nullable String accountId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Finds a customer or account cart with the given status, customer cart will automatically be retrieved if the given accountId is null.

      The cart with the latest Cart.getCreateDate() is retrieved if there're multiple Carts.

      Specified by:
      retrieveCartByStatusAndName in interface CartProvider
      Parameters:
      customerId - the customer ID
      status - the status
      name - the name of the cart to match or, if null, then a cart with no name
      accountId - the account ID, null can be passed in to retrieve customer cart
      contextInfo - the context info
      Returns:
      a cart if it exists
    • retrieveCartByOrderNumber

      public Optional<com.broadleafcommerce.cart.client.domain.Cart> retrieveCartByOrderNumber(String customerId, String orderNumber, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Find the cart (if it exists) for the provided customer id and order number.
      Specified by:
      retrieveCartByOrderNumber in interface CartProvider
      Parameters:
      customerId - the id of the customer who owns the cart
      orderNumber - the order number for the cart
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      a cart (if it exists) with the given order number that belongs to the provided customer
    • retrieveHistoricalCartsForCustomer

      public SimplePage<com.broadleafcommerce.cart.client.domain.Cart> retrieveHistoricalCartsForCustomer(String customerId, @Nullable Date startDate, @Nullable Date endDate, @Nullable org.springframework.data.domain.Pageable page, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Find all carts that are DefaultCartStatuses.SUBMITTED or DefaultCartStatuses.CANCELLED for the provided customer and dates.
      Specified by:
      retrieveHistoricalCartsForCustomer in interface CartProvider
      Parameters:
      customerId - the id of the customer who owns the carts
      startDate - the starting date to filter carts by
      endDate - the ending date to filter carts by
      page - the requested page of results from the database
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      all carts that are DefaultCartStatuses.SUBMITTED or for the provided customer and dates.
    • retrieveHistoricalCartForAnonymousCustomer

      public Optional<com.broadleafcommerce.cart.client.domain.Cart> retrieveHistoricalCartForAnonymousCustomer(String emailAddress, String orderNumber, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Finds a single, historical cart for an anonymous customer.
      Specified by:
      retrieveHistoricalCartForAnonymousCustomer in interface CartProvider
      Parameters:
      emailAddress - The email address associated with the cart
      orderNumber - The historical cart's order number
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The single, historical cart for an anonymous customer
    • retrieveCartById

      public Optional<com.broadleafcommerce.cart.client.domain.Cart> retrieveCartById(String cartId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Retrieve the cart.
      Specified by:
      retrieveCartById in interface CartProvider
      Parameters:
      cartId - The id of the cart on which to perform the operation.
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The cart for the provided id.
    • createNonRequestCart

      public com.broadleafcommerce.cart.client.domain.Cart createNonRequestCart(@NonNull @NonNull com.broadleafcommerce.cart.client.domain.Cart cart, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Create a new cart, without updating the original request cart.
      Specified by:
      createNonRequestCart in interface CartProvider
      Parameters:
      cart - The cart to create
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The created cart.
    • createCart

      public com.broadleafcommerce.cart.client.domain.Cart createCart(@NonNull @NonNull com.broadleafcommerce.cart.client.domain.Cart cart, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Create a new cart.
      Specified by:
      createCart in interface CartProvider
      Parameters:
      cart - The cart to create
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The created cart.
    • updateCart

      public com.broadleafcommerce.cart.client.domain.Cart updateCart(@NonNull @NonNull com.broadleafcommerce.cart.client.domain.Cart cart, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Update the cart.
      Specified by:
      updateCart in interface CartProvider
      Parameters:
      cart - The cart on which to perform the operation.
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The updated cart.
    • updateCart

      public com.broadleafcommerce.cart.client.domain.Cart updateCart(@NonNull @NonNull UpdateCartRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Update the cart.
      Specified by:
      updateCart in interface CartProvider
      Parameters:
      request - The request used to perform the operation.
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The updated cart.
    • retrieveCartsMatchingTenantByStatus

      public org.springframework.data.domain.Page<com.broadleafcommerce.cart.client.domain.Cart> retrieveCartsMatchingTenantByStatus(String status, @Nullable org.springframework.data.domain.Pageable pageable, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Retrieves a Page of Carts based on the given status and matching the tenant from the given ContextInfo.

      Note that this ignores application context and should only be used in scheduled jobs where application context is not available.

      Specified by:
      retrieveCartsMatchingTenantByStatus in interface CartProvider
      Parameters:
      status - the status to find the carts
      pageable - the requested page of results
      contextInfo - context information related to multitenancy
      Returns:
      a Page of Carts based on the given status and matching the tenant from the given ContextInfo
    • updateCartsMatchingTenantStatus

      public List<com.broadleafcommerce.cart.client.domain.Cart> updateCartsMatchingTenantStatus(List<String> cartIds, String status, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Updates the Cart.getStatus() for the given cart ids and status and matching the tenant from the given ContextInfo.

      Note that this ignores application context and should only be used in scheduled jobs where application context is not available.

      Specified by:
      updateCartsMatchingTenantStatus in interface CartProvider
      Parameters:
      cartIds - the ids of the carts to update the status for
      status - the status to update the carts to
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The updated carts.
    • patchCart

      public com.broadleafcommerce.cart.client.domain.Cart patchCart(@NonNull @NonNull com.broadleafcommerce.cart.client.domain.Cart cart, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Patch the cart. A patch does not replace the cart, but partially updates it using any non-null fields.
      Specified by:
      patchCart in interface CartProvider
      Parameters:
      cart - The cart on which to perform the operation.
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The patched cart.
    • updateCartItem

      public com.broadleafcommerce.cart.client.domain.CartItem updateCartItem(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.cart.client.domain.CartItem cartItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Update the cart item.
      Specified by:
      updateCartItem in interface CartProvider
      Parameters:
      cart - the cart the item belongs to
      cartItem - The cart item on which to perform the operation.
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      The updated cart item.
    • deleteCartItem

      public void deleteCartItem(String cartId, com.broadleafcommerce.cart.client.domain.CartItem cartItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Delete the cart item.
      Specified by:
      deleteCartItem in interface CartProvider
      Parameters:
      cartId - the ID of the card the item belongs to
      cartItem - The cart item on which to perform the operation.
      contextInfo - Context information around sandbox and multitenant state.
    • sendRollbackEvent

      public void sendRollbackEvent(CheckoutRollbackEvent rollbackEvent, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Sends the rollback event to the cart service. The cart service handles this event and uses the durable message sending that is guaranty the message delivery.
      Specified by:
      sendRollbackEvent in interface CartProvider
      Parameters:
      rollbackEvent - the event that should be send
      contextInfo - context information around sandbox and multitenant state
    • sendCheckoutCompletionEvent

      public void sendCheckoutCompletionEvent(CheckoutCompletionEvent checkoutCompletionEvent, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Sends the checkout completion event to the cart service. The cart service handles this event and uses the durable message sending that is guaranty the message delivery.
      Specified by:
      sendCheckoutCompletionEvent in interface CartProvider
      Parameters:
      checkoutCompletionEvent - the event that should be send
      contextInfo - context information around sandbox and multitenant state
    • sendCartRejectionEvent

      public void sendCartRejectionEvent(@NonNull @NonNull CartRejectionEvent cartRejectionEvent, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Sends the cart rejection event to the cart service. The cart service handles this event and uses the durable message sending that is guaranty the message delivery.
      Specified by:
      sendCartRejectionEvent in interface CartProvider
      Parameters:
      cartRejectionEvent - the event that should be send
      contextInfo - context information around sandbox and multitenant state
    • getMyCartsStatusFilter

      protected String getMyCartsStatusFilter()
    • sendCartPendingPaymentFailedEvent

      public void sendCartPendingPaymentFailedEvent(@NonNull @NonNull CartPendingPaymentFailedEvent cartPendingPaymentFailedEvent, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Description copied from interface: CartProvider
      Sends the cart pending payment failed event to the cart service. The cart service handles this event and uses the durable message sending that is guaranty the message delivery.
      Specified by:
      sendCartPendingPaymentFailedEvent in interface CartProvider
      Parameters:
      cartPendingPaymentFailedEvent - the event that should be send
      contextInfo - context information around sandbox and multitenant state
    • retrieveCart

      protected Optional<com.broadleafcommerce.cart.client.domain.Cart> retrieveCart(String retrieveCartUrl, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Method for retrieving a single, optional cart. This will handle adding headers and attributes and handle errors in a common way. 404 results in returning Optional.empty().
      Parameters:
      retrieveCartUrl - Fully built URL specifying the endpoint to hit and including query params
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      a single, optional cart.
      Throws:
      ProviderApiException - if an error occurs during or from the request such as a 500 response
    • populateCurrency

      protected com.broadleafcommerce.cart.client.domain.Cart populateCurrency(com.broadleafcommerce.cart.client.domain.Cart cart, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
    • findCartItemIndex

      protected int findCartItemIndex(com.broadleafcommerce.cart.client.domain.Cart cart, String itemId)
      Finds the index at which the cart item with the given ID is at.
      Parameters:
      cart - the cart to search through
      itemId - the ID of the item to find the index of
      Returns:
      the index of the cart item
      Throws:
      com.broadleafcommerce.data.tracking.core.exception.EntityMissingException - when no item with the given ID exists
    • syncItemToCart

      protected void syncItemToCart(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.cart.client.domain.CartItem cartItem)
      Takes changes made from an update to a single item and applies them to the cart and items in it.
      Parameters:
      cart - the cart to apply updates to
      cartItem - the updated version of the item that was just update
    • updateRequestCart

      protected com.broadleafcommerce.cart.client.domain.Cart updateRequestCart(com.broadleafcommerce.cart.client.domain.Cart cart)
      This updates the cart for the current request with a recently received version from the cart service. This should be called after calling any endpoint which leaves the cart in an out of date state. For example, an update on the cart will result in a completely new cart instance being returned from the cart service. That new instance should be run through this method. This will ignore carts that have a different ID than the one associated to the request.
      Parameters:
      cart - the cart to update the request context with
      Returns:
      the same cart provided for chaining purposes
    • cartConflict

      protected StaleCartException cartConflict(Integer requestCartVersion, @Nullable String cartId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo, org.springframework.web.reactive.function.client.WebClientResponseException.Conflict conflictException)
      Builds an exception when a CONFLICT exception is thrown from the Cart Service, indicating that an optimistic lock failure occurred. This exception contains a freshly retrieved instance of the cart, allowing the client to update it's version of the cart to match.
      Parameters:
      requestCartVersion - the requested version of the cart
      cartId - the ID of the requested cart, or null if not known (in which case, fresh cart retrieval will be skipped)
      contextInfo - Context information around sandbox and multitenant state.
      conflictException - an exception representing the HTTP 409 (CONFLICT) error
      Returns:
      a stale cart exception with the freshly retrieved cart if able
    • resolveCartFromConflict

      @Nullable protected com.broadleafcommerce.cart.client.domain.Cart resolveCartFromConflict(org.springframework.web.reactive.function.client.WebClientResponseException.Conflict conflict)
      Attempts to extract a fresh version of the cart from the CONFLICT error's response body.
      Parameters:
      conflict - the conflict exception that occurred while saving a cart
      Returns:
      the cart from the response body, or null if unavailable
    • retrieveCartAfterConflict

      @Nullable protected com.broadleafcommerce.cart.client.domain.Cart retrieveCartAfterConflict(@Nullable String cartId, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Retrieves the latest version of the cart following a conflict error if possible. See cartConflict(Integer, String, ContextInfo, WebClientResponseException.Conflict).
      Parameters:
      cartId - the ID of the relevant cart
      contextInfo - Context information around sandbox and multitenant state.
      Returns:
      the retrieved cart, or null if unable to retrieve
    • getCartIdVariables

      protected Map<String,Object> getCartIdVariables(String cartId)
    • getServiceClient

      protected String getServiceClient()