Documentation ¶
Index ¶
- Constants
- Variables
- type AddRequest
- type AdditionalData
- type AdditionalDeliverInfo
- type Address
- type AppliedCouponCodes
- type AppliedDiscount
- type AppliedDiscounts
- type AppliedGiftCard
- type AppliedGiftCards
- type Cart
- func (c Cart) AllShippingTitles() []string
- func (c Cart) Clone() (Cart, error)
- func (c Cart) GetAllPaymentRequiredItems() PricedItems
- func (c Cart) GetByExternalReference(ref string) (*Item, error)
- func (c Cart) GetByItemID(itemID string) (*Item, error)
- func (c Cart) GetCartTeaser() *Teaser
- func (c Cart) GetContactMail() string
- func (c Cart) GetDeliveryByCode(deliveryCode string) (*Delivery, bool)
- func (c Cart) GetDeliveryByCodeWithoutBool(deliveryCode string) *Delivery
- func (c Cart) GetDeliveryByItemID(itemID string) (*Delivery, error)
- func (c Cart) GetDeliveryCodes() []string
- func (c Cart) GetMainShippingEMail() string
- func (c Cart) GetPaymentReference() string
- func (c Cart) GetTotalItemsByType(typeCode string) []Totalitem
- func (c Cart) GetTotalQty(marketPlaceCode string, variantCode string) int
- func (c Cart) GetVoucherSavings() domain.Price
- func (c Cart) GrandTotalCharges() domain.Charges
- func (c Cart) HasAppliedCouponCode() bool
- func (c *Cart) HasAppliedDiscounts() (bool, error)
- func (c Cart) HasAppliedGiftCards() bool
- func (c Cart) HasDeliveryForCode(deliveryCode string) bool
- func (c Cart) HasRemainingGiftCards() bool
- func (c Cart) HasShippingCosts() bool
- func (c Cart) IsEmpty() bool
- func (c Cart) IsPaymentSelected() bool
- func (c Cart) ItemCount() int
- func (c *Cart) MergeDiscounts() (AppliedDiscounts, error)
- func (c Cart) ProductCount() int
- func (c Cart) ProductCountUnique() int
- func (c Cart) SumTaxes() Taxes
- func (c Cart) SumTotalTaxAmount() domain.Price
- type CompleteBehaviour
- type CouponCode
- type CustomerCartService
- type DefaultDeliveryInfoBuilder
- type DefaultPaymentSelection
- func (d DefaultPaymentSelection) CartSplit() PaymentSplit
- func (d DefaultPaymentSelection) Gateway() string
- func (d DefaultPaymentSelection) GenerateNewIdempotencyKey() (PaymentSelection, error)
- func (d DefaultPaymentSelection) IdempotencyKey() string
- func (d DefaultPaymentSelection) ItemSplit() PaymentSplitByItem
- func (d DefaultPaymentSelection) MarshalJSON() ([]byte, error)
- func (d DefaultPaymentSelection) MethodByType(chargeType string) string
- func (d DefaultPaymentSelection) TotalValue() price.Price
- type DeferEvents
- type Delivery
- type DeliveryInfo
- func (di DeliveryInfo) AdditionalDataKeys() []string
- func (di DeliveryInfo) AdditionalDeliveryInfoKeys() []string
- func (di DeliveryInfo) GetAdditionalData(key string) string
- func (di DeliveryInfo) GetAdditionalDeliveryInfo(key string) json.RawMessage
- func (di *DeliveryInfo) LoadAdditionalInfo(key string, info AdditionalDeliverInfo) error
- type DeliveryInfoBuilder
- type DeliveryInfoUpdateCommand
- type DeliveryLocation
- type ExistingCustomerData
- type GiftCardAndVoucherBehaviour
- type GiftCardBehaviour
- type GuestCartService
- type InvalidateCartEvent
- type Item
- func (i Item) AdditionalDataKeys() []string
- func (i Item) AdditionalDataValues() []string
- func (i Item) GetAdditionalData(key string) string
- func (i Item) HasAdditionalDataKey(key string) bool
- func (i *Item) HasAppliedDiscounts() (bool, error)
- func (i *Item) MergeDiscounts() (AppliedDiscounts, error)
- func (i Item) TotalTaxAmount() priceDomain.Price
- type ItemSplitter
- type ItemUpdateCommand
- type ModifyBehaviour
- type PaymentSelection
- func NewDefaultPaymentSelection(gateway string, chargeTypeToPaymentMethod map[string]string, cart Cart) (PaymentSelection, error)
- func NewPaymentSelection(gateway string, chargedItems PaymentSplitByItem) PaymentSelection
- func RemoveZeroCharges(selection PaymentSelection, chargeTypeToPaymentMethod map[string]string) PaymentSelection
- type PaymentSplit
- type PaymentSplitByItem
- type PaymentSplitByItemBuilder
- func (pb *PaymentSplitByItemBuilder) AddCartItem(id string, method string, charge price.Charge) *PaymentSplitByItemBuilder
- func (pb *PaymentSplitByItemBuilder) AddShippingItem(deliveryCode string, method string, charge price.Charge) *PaymentSplitByItemBuilder
- func (pb *PaymentSplitByItemBuilder) AddTotalItem(totalType string, method string, charge price.Charge) *PaymentSplitByItemBuilder
- func (pb *PaymentSplitByItemBuilder) Build() PaymentSplitByItem
- type PaymentSplitService
- type Person
- type PersonalDetails
- type PricedItems
- type ShippingItem
- type SplitQualifier
- type Tax
- type Taxes
- type Teaser
- type Totalitem
- type WithDiscount
- type WithGiftCard
Constants ¶
const ( TotalsTypeDiscount = "totals_type_discount" TotalsTypeVoucher = "totals_type_voucher" TotalsTypeTax = "totals_type_tax" TotalsTypeLoyaltypoints = "totals_loyaltypoints" TotalsTypeShipping = "totals_type_shipping" )
Key constants
const ( // DeliveryWorkflowPickup constant for pickup delivery workflow DeliveryWorkflowPickup = "pickup" // DeliveryWorkflowDelivery constant for delivery delivery workflow DeliveryWorkflowDelivery = "delivery" // DeliveryWorkflowUnspecified constant for an unspecified delivery workflow DeliveryWorkflowUnspecified = "unspecified" // DeliverylocationTypeUnspecified constant for an unspecified delivery location type DeliverylocationTypeUnspecified = "unspecified" // DeliverylocationTypeCollectionpoint constant for collection points DeliverylocationTypeCollectionpoint = "collection-point" // DeliverylocationTypeStore constant for store delivery DeliverylocationTypeStore = "store" // DeliverylocationTypeAddress constant for deliveries to an address DeliverylocationTypeAddress = "address" // DeliverylocationTypeFreightstation constant for deliveries to an freight station DeliverylocationTypeFreightstation = "freight-station" )
Variables ¶
var ( // ErrCartNotFound is used if a cart was not found ErrCartNotFound = errors.New("Cart not found") // ErrItemNotFound is used if a item on cart was not found ErrItemNotFound = errors.New("Item not found") // ErrDeliveryCodeNotFound is used if a delivery was not found ErrDeliveryCodeNotFound = errors.New("Delivery not found") )
var ( // ErrSplitNoGiftCards indicates that there are no gift cards given to PaymentSplitWithGiftCards ErrSplitNoGiftCards = errors.New("no gift cards applied") // ErrSplitEmptyGiftCards indicates that there are gift cards given but with 0 applied balance ErrSplitEmptyGiftCards = errors.New("applied gift cards are empty") // ErrSplitGiftCardsExceedTotal indicates that gift card sum exceeds total of prices items ErrSplitGiftCardsExceedTotal = errors.New("gift card amount exceeds total priced items value") // ErrSplitGiftCardsNoChargeTypeMapping indicates that there is no mapping from the gift card charge type to an actual payment method ErrSplitGiftCardsNoChargeTypeMapping = fmt.Errorf("payment method for charge type %q not defined", price.ChargeTypeGiftCard) // ErrPaymentSelectionNotSet is used for nil PaymentSelection on cart ErrPaymentSelectionNotSet = errors.New("paymentSelection not set") )
var ( // ErrAdditionalInfosNotFound is returned if the additional infos are not set ErrAdditionalInfosNotFound = errors.New("additional infos not found") )
Functions ¶
This section is empty.
Types ¶
type AddRequest ¶
type AddRequest struct { MarketplaceCode string Qty int VariantMarketplaceCode string AdditionalData map[string]string BundleConfiguration productDomain.BundleConfiguration }
AddRequest defines add to cart request
type AdditionalData ¶
type AdditionalData struct { // CustomAttributes list of key values CustomAttributes map[string]string // ReservedOrderID is an ID already known by the Cart of the future order ID ReservedOrderID string }
AdditionalData defines the supplementary cart data
type AdditionalDeliverInfo ¶
type AdditionalDeliverInfo interface { Marshal() (json.RawMessage, error) Unmarshal(json.RawMessage) error }
AdditionalDeliverInfo is an interface that allows to store "any" additional objects on the cart see DeliveryInfoUpdateCommand
type Address ¶
type Address struct { Vat string Firstname string Lastname string MiddleName string Title string Salutation string Street string StreetNr string AdditionalAddressLines []string Company string City string PostCode string State string RegionCode string Country string CountryCode string TelephoneCountryCode string TelephoneAreaCode string TelephoneNumber string // Deprecated: parts of number should be distinguished, please use TelephoneCountryCode, TelephoneAreaCode and TelephoneNumber Telephone string Email string }
Address defines a cart address
type AppliedCouponCodes ¶ added in v3.0.1
type AppliedCouponCodes []CouponCode
AppliedCouponCodes slice of applied coupon codes
func (AppliedCouponCodes) ContainedIn ¶ added in v3.0.1
func (acc AppliedCouponCodes) ContainedIn(couponCodesToCompare AppliedCouponCodes) bool
ContainedIn returns if the coupon codes are contained in couponCodesToCompare
type AppliedDiscount ¶
type AppliedDiscount struct { CampaignCode string // unique code of the underlying campaign or rule e.g. "summer-campaign-2018" CouponCode string // code of discount e.g. provided by user "summer2018" Label string // readable name of discount "Super Summer Sale 2018" Applied domain.Price // how much of the discount has been subtracted from cart price, IMPORTANT: always negative Type string // to distinguish between discounts IsItemRelated bool // flag indicating if the discount is applied due to item in cart SortOrder int // indicates in which order discount have been applied, low value has been applied before high value }
AppliedDiscount value object - generic reference for a discount
type AppliedDiscounts ¶
type AppliedDiscounts []AppliedDiscount
AppliedDiscounts represents multiple discounts that are subtracted from total price of cart
func (AppliedDiscounts) ByCampaignCode ¶
func (discounts AppliedDiscounts) ByCampaignCode(campaignCode string) AppliedDiscounts
ByCampaignCode filter AppliedDiscounts based on provided campaign code
func (AppliedDiscounts) ByType ¶
func (discounts AppliedDiscounts) ByType(filterType string) AppliedDiscounts
ByType filter AppliedDiscounts based on type
func (AppliedDiscounts) Items ¶
func (discounts AppliedDiscounts) Items() []AppliedDiscount
Items getter for graphql integration
type AppliedGiftCard ¶
type AppliedGiftCard struct { Code string Applied domain.Price // how much of the gift card has been subtracted from cart price Remaining domain.Price // how much of the gift card is still available CustomAttributes map[string]interface{} // additional custom attributes }
AppliedGiftCard value object represents a gift card (partial payment) on the cart
func (AppliedGiftCard) HasRemaining ¶
func (card AppliedGiftCard) HasRemaining() bool
HasRemaining checks whether gift card has a remaining balance
type AppliedGiftCards ¶
type AppliedGiftCards []AppliedGiftCard
AppliedGiftCards convenience wrapper for array of applied gift cards
func (*AppliedGiftCards) ByRemaining ¶
func (cards *AppliedGiftCards) ByRemaining() AppliedGiftCards
ByRemaining fetches gift cards that still have a remaining value from applied gift cards
func (*AppliedGiftCards) GiftCardByCode ¶
func (cards *AppliedGiftCards) GiftCardByCode(code string) (*AppliedGiftCard, bool)
GiftCardByCode returns a single gift card if the given code matches its code. First return parameter is the gift card if found and the second return parameter is a boolean depicting if a gift card was found
type Cart ¶
type Cart struct { // ID is the main identifier of the cart ID string // EntityID is a second identifier that may be used by some backends EntityID string // BillingAddress is the main billing address (relevant for all payments/invoices) BillingAddress *Address // Purchaser hold additional infos for the legal contact person in this order Purchaser *Person // Deliveries contains a list of desired Deliveries (or Shipments) involved in this cart Deliveries []Delivery // AdditionalData can be used for Custom attributes AdditionalData AdditionalData // PaymentSelection is used to store information on "how" the customer wants to pay PaymentSelection PaymentSelection // BelongsToAuthenticatedUser displays if the cart is guest cart (false) or from an authenticated user (true) BelongsToAuthenticatedUser bool // AuthenticatedUserID holds the potential customer ID AuthenticatedUserID string // AppliedCouponCodes hold the coupons or discount codes that are applied to the cart AppliedCouponCodes []CouponCode DefaultCurrency string // Additional non taxable totals Totalitems []Totalitem // AppliedGiftCards is a list of applied gift cards AppliedGiftCards []AppliedGiftCard // AppliedGiftCardsAmount is the part of GrandTotal which is paid by gift cards TotalGiftCardAmount domain.Price // GrandTotalWithGiftCards is the final amount with the applied gift cards subtracted. GrandTotalWithGiftCards domain.Price // GrandTotalNetWithGiftCards is the corresponding net value to GrandTotalWithGiftCards GrandTotalNetWithGiftCards domain.Price // GrandTotal is the final amount that need to be paid by the customer (gross) GrandTotal domain.Price // GrandTotalNet is the corresponding net value to GrandTotal GrandTotalNet domain.Price // ShippingNet is the sum of all shipping costs ShippingNet domain.Price // ShippingNetWithDiscounts is the sum of all shipping costs with all shipping discounts ShippingNetWithDiscounts domain.Price // ShippingGross is the sum of all shipping costs including tax ShippingGross domain.Price // ShippingGrossWithDiscounts is the sum of all shipping costs with all shipping discounts including tax ShippingGrossWithDiscounts domain.Price // SubTotalGross is the sum of all delivery subtotals (without shipping/ discounts) SubTotalGross domain.Price // SubTotalNet is the sum of all delivery net subtotals (without shipping/ discounts) SubTotalNet domain.Price // SubTotalGrossWithDiscounts is the sum of row gross prices reduced by the applied discounts SubTotalGrossWithDiscounts domain.Price // SubTotalNetWithDiscounts is the sum of row net prices reduced by the net value of the applied discounts SubTotalNetWithDiscounts domain.Price // TotalDiscountAmount is the sum of all discounts (incl. shipping) TotalDiscountAmount domain.Price // NonItemRelatedDiscountAmount is the sum of discounts that are not related to the item (including shipping discounts) NonItemRelatedDiscountAmount domain.Price // ItemRelatedDiscountAmount is the sum of discounts that are related to the item (including shipping discounts) ItemRelatedDiscountAmount domain.Price }
Cart Value Object (immutable data - because the CartService is responsible to return a cart).
func (Cart) AllShippingTitles ¶
AllShippingTitles returns all ShippingItem titles
func (Cart) GetAllPaymentRequiredItems ¶
func (c Cart) GetAllPaymentRequiredItems() PricedItems
GetAllPaymentRequiredItems returns all the Items (Cartitem, ShippingItem, TotalItems) that need to be paid with the final gross price
func (Cart) GetByExternalReference ¶
GetByExternalReference gets an item by its external reference
func (Cart) GetByItemID ¶
GetByItemID gets an item by its id
func (Cart) GetContactMail ¶ added in v3.4.0
GetContactMail returns the contact mail from the shipping address with fall back to the billing address
func (Cart) GetDeliveryByCode ¶
GetDeliveryByCode gets a delivery by code
func (Cart) GetDeliveryByCodeWithoutBool ¶
GetDeliveryByCodeWithoutBool TODO: This func needs to be removed as soon as there's a solution for handling of boolean returns when gql expects an err
func (Cart) GetDeliveryByItemID ¶
GetDeliveryByItemID returns a delivery by a given itemID
func (Cart) GetDeliveryCodes ¶
GetDeliveryCodes returns a slice of all delivery codes in cart that have at least one cart item
func (Cart) GetMainShippingEMail ¶
GetMainShippingEMail returns the main shipping address email, empty string if not available
func (Cart) GetPaymentReference ¶
GetPaymentReference returns a string that can be used as reference to pass to payment gateway. You may want to use it. It returns either the reserved Order id or the cart id/entityID
func (Cart) GetTotalItemsByType ¶
GetTotalItemsByType returns a slice of all Totalitems by typeCode
func (Cart) GetTotalQty ¶
GetTotalQty for the product in the cart
func (Cart) GetVoucherSavings ¶
GetVoucherSavings returns the savings of all vouchers
func (Cart) GrandTotalCharges ¶
GrandTotalCharges is the final sum that need to be paid - split by the charges that need to be paid
func (Cart) HasAppliedCouponCode ¶
HasAppliedCouponCode checks if a coupon code is applied to the cart
func (*Cart) HasAppliedDiscounts ¶
HasAppliedDiscounts check whether there are any discounts currently applied to the cart
func (Cart) HasAppliedGiftCards ¶
HasAppliedGiftCards checks if a gift card is applied to the cart
func (Cart) HasDeliveryForCode ¶
HasDeliveryForCode checks if a delivery with the given code exists in the cart
func (Cart) HasRemainingGiftCards ¶
HasRemainingGiftCards check whether there are gift cards with remaining balance
func (Cart) HasShippingCosts ¶
HasShippingCosts returns true if cart HasShippingCosts
func (Cart) IsPaymentSelected ¶
IsPaymentSelected returns true if a valid payment is selected
func (*Cart) MergeDiscounts ¶
func (c *Cart) MergeDiscounts() (AppliedDiscounts, error)
MergeDiscounts sums up discounts of cart based on its deliveries All discounts with the same campaign code are aggregated and returned as one with a summed price
func (Cart) ProductCount ¶
ProductCount returns the amount of different products, but a product is counted twice if it is in different deliveries
func (Cart) ProductCountUnique ¶ added in v3.1.0
ProductCountUnique returns the amount of unique products across all deliveries
func (Cart) SumTotalTaxAmount ¶
SumTotalTaxAmount returns sum price of deliveries Taxes as total amount
type CompleteBehaviour ¶ added in v3.1.0
type CompleteBehaviour interface { Complete(context.Context, *Cart) (*Cart, DeferEvents, error) // Restore should reopen the cart while maintaining the previously used cart id Restore(context.Context, *Cart) (*Cart, DeferEvents, error) }
CompleteBehaviour can be implemented by a cart service. Complete is normally called before the cart is placed This can for example be used to invalidate gift cards
type CouponCode ¶
type CouponCode struct { Code string // CustomAttributes can hold additional data for coupon code - keys and values are project specific CustomAttributes map[string]interface{} }
CouponCode value object
type CustomerCartService ¶
type CustomerCartService interface { // GetModifyBehaviour gets the behaviour for the customer cart service GetModifyBehaviour(context.Context, auth.Identity) (ModifyBehaviour, error) // GetCart for authenticated user and optional cartid GetCart(ctx context.Context, identity auth.Identity, cartID string) (*Cart, error) // RestoreCart restores a previously used customer cart with all its content. // Depending on the used adapter this can lead to a new Cart.ID // Deprecated: Implement CompleteBehaviour instead RestoreCart(ctx context.Context, identity auth.Identity, cart Cart) (*Cart, error) }
CustomerCartService interface - Secondary PORT
type DefaultDeliveryInfoBuilder ¶
type DefaultDeliveryInfoBuilder struct {
// contains filtered or unexported fields
}
DefaultDeliveryInfoBuilder defines the default delivery info builder used
func (*DefaultDeliveryInfoBuilder) BuildByDeliveryCode ¶
func (b *DefaultDeliveryInfoBuilder) BuildByDeliveryCode(deliverycode string) (*DeliveryInfo, error)
BuildByDeliveryCode builds a (initial) DeliveryInfo by deliveryCode Convention that is used in this factory is to split infos in the build deliveryinfo by "_" like this:
- workflow_locationtype_locationdetail_method_anythingelse
- not all parts are required
- to "skip" parts in between use "-"
type DefaultPaymentSelection ¶
type DefaultPaymentSelection struct { // GatewayProp - the selected Gateway GatewayProp string ChargedItemsProp PaymentSplitByItem IdempotencyKeyUUID string }
DefaultPaymentSelection value object - that implements the PaymentSelection interface
func (DefaultPaymentSelection) CartSplit ¶
func (d DefaultPaymentSelection) CartSplit() PaymentSplit
CartSplit returns the selected split per ChargeType and PaymentMethod
func (DefaultPaymentSelection) Gateway ¶
func (d DefaultPaymentSelection) Gateway() string
Gateway returns the selected Gateway code
func (DefaultPaymentSelection) GenerateNewIdempotencyKey ¶ added in v3.0.1
func (d DefaultPaymentSelection) GenerateNewIdempotencyKey() (PaymentSelection, error)
GenerateNewIdempotencyKey updates the Idempotency-Key to a new value
func (DefaultPaymentSelection) IdempotencyKey ¶ added in v3.0.1
func (d DefaultPaymentSelection) IdempotencyKey() string
IdempotencyKey returns the Idempotency-Key for this payment selection
func (DefaultPaymentSelection) ItemSplit ¶
func (d DefaultPaymentSelection) ItemSplit() PaymentSplitByItem
ItemSplit returns the selected split per ChargeType and PaymentMethod
func (DefaultPaymentSelection) MarshalJSON ¶ added in v3.0.1
func (d DefaultPaymentSelection) MarshalJSON() ([]byte, error)
MarshalJSON adds the Idempotency-Key to the payment selection json
func (DefaultPaymentSelection) MethodByType ¶
func (d DefaultPaymentSelection) MethodByType(chargeType string) string
MethodByType returns the payment method by charge type
func (DefaultPaymentSelection) TotalValue ¶
func (d DefaultPaymentSelection) TotalValue() price.Price
TotalValue returns returns Valued price sum
type DeferEvents ¶
DeferEvents represents events that should be dispatched after a cart modify call
type Delivery ¶
type Delivery struct { // DeliveryInfo contains details for this delivery e.g. how and where the delivery should be delivered to DeliveryInfo DeliveryInfo // Cartitems is the list of items belonging to this delivery Cartitems []Item // ShippingItem represent the shipping cost that may be involved in this delivery ShippingItem ShippingItem // SubTotalGross contains the sum of row gross prices, without shipping/discounts SubTotalGross priceDomain.Price // SubTotalNet contains the sum of row net prices, without shipping/discounts SubTotalNet priceDomain.Price // TotalDiscountAmount contains the sum of all discounts (incl. shipping) TotalDiscountAmount priceDomain.Price // TotalDiscountAmount contains the sum of all discounts (excl. shipping) SubTotalDiscountAmount priceDomain.Price // NonItemRelatedDiscountAmount contains the sum of discounts that are not related to the item, e.g. a general promo NonItemRelatedDiscountAmount priceDomain.Price // ItemRelatedDiscountAmount contains the sum of discounts that are related to the item, e.g. promo due to product attribute ItemRelatedDiscountAmount priceDomain.Price // SubTotalGrossWithDiscounts contains the sum of row gross prices reduced by the applied discounts SubTotalGrossWithDiscounts priceDomain.Price // SubTotalNetWithDiscounts contains the sum of row net prices reduced by the net value of the applied discounts SubTotalNetWithDiscounts priceDomain.Price // GrandTotal contains the final price to pay GrandTotal priceDomain.Price }
Delivery - represents the DeliveryInfo and the assigned Items
func (*Delivery) HasAppliedDiscounts ¶
HasAppliedDiscounts check whether there are any discounts currently applied to the delivery
func (*Delivery) MergeDiscounts ¶
func (d *Delivery) MergeDiscounts() (AppliedDiscounts, error)
MergeDiscounts sums up discounts of a delivery based on its single item discounts All discounts with the same campaign code are aggregated and returned as one with a summed price
func (Delivery) SumRowTaxes ¶
SumRowTaxes returns all taxes applied to items of this delivery
func (Delivery) SumTotalTaxAmount ¶
func (d Delivery) SumTotalTaxAmount() priceDomain.Price
SumTotalTaxAmount returns the sum of all applied item taxes
type DeliveryInfo ¶
type DeliveryInfo struct { // Code is a project specific identifier for the Delivery - you need it for the AddToCart Request for example // the code can follow the convention in the Readme: Type_Method_LocationType_LocationCode Code string // Workflow of the Delivery e.g. delivery or pickup, see DeliveryWorkflowPickup, DeliveryWorkflowDelivery or DeliveryWorkflowUnspecified Workflow string // Method is the shipping method something that is project specific and that can mean different delivery qualities with different delivery costs Method string // Carrier optional name of the Carrier that should be responsible for executing the delivery Carrier string // DeliveryLocation is the target location for the delivery DeliveryLocation DeliveryLocation // DesiredTime is an optional desired time for the delivery DesiredTime time.Time // AdditionalData can be used to store project specific information on the delivery AdditionalData map[string]string // AdditionalDeliveryInfos is similar to AdditionalData but can be used to store "any" other object on a delivery encoded as json.RawMessage AdditionalDeliveryInfos map[string]json.RawMessage `swaggerignore:"true"` }
DeliveryInfo - represents the Delivery
func (DeliveryInfo) AdditionalDataKeys ¶
func (di DeliveryInfo) AdditionalDataKeys() []string
AdditionalDataKeys lists all available keys
func (DeliveryInfo) AdditionalDeliveryInfoKeys ¶
func (di DeliveryInfo) AdditionalDeliveryInfoKeys() []string
AdditionalDeliveryInfoKeys lists all available keys
func (DeliveryInfo) GetAdditionalData ¶
func (di DeliveryInfo) GetAdditionalData(key string) string
GetAdditionalData returns additional data
func (DeliveryInfo) GetAdditionalDeliveryInfo ¶
func (di DeliveryInfo) GetAdditionalDeliveryInfo(key string) json.RawMessage
GetAdditionalDeliveryInfo returns additional delivery info
func (*DeliveryInfo) LoadAdditionalInfo ¶
func (di *DeliveryInfo) LoadAdditionalInfo(key string, info AdditionalDeliverInfo) error
LoadAdditionalInfo returns the additional Data
type DeliveryInfoBuilder ¶
type DeliveryInfoBuilder interface {
BuildByDeliveryCode(deliveryCode string) (*DeliveryInfo, error)
}
DeliveryInfoBuilder can be used to set delivery infos depending on supplied delivery code
type DeliveryInfoUpdateCommand ¶
type DeliveryInfoUpdateCommand struct { DeliveryInfo DeliveryInfo // contains filtered or unexported fields }
DeliveryInfoUpdateCommand defines the update item command
func CreateDeliveryInfoUpdateCommand ¶
func CreateDeliveryInfoUpdateCommand(info DeliveryInfo) DeliveryInfoUpdateCommand
CreateDeliveryInfoUpdateCommand - factory to get the update command based on the given deliveryInfos (which might come from cart)
func (*DeliveryInfoUpdateCommand) AddAdditional ¶
func (d *DeliveryInfoUpdateCommand) AddAdditional(key string, val AdditionalDeliverInfo) (err error)
AddAdditional adds additional delivery info data
func (*DeliveryInfoUpdateCommand) Additional ¶
func (d *DeliveryInfoUpdateCommand) Additional() map[string]json.RawMessage
Additional gets the additional data as war map from the delivery info update command
func (*DeliveryInfoUpdateCommand) SetAdditional ¶
func (d *DeliveryInfoUpdateCommand) SetAdditional(val map[string]json.RawMessage)
SetAdditional adds additional delivery info data
type DeliveryLocation ¶
type DeliveryLocation struct { // Type is the type of the delivery - use some of the constant defined in the package like DeliverylocationTypeAddress Type string // Address contains the address of the delivery location, maybe not relevant if the type is not address Address *Address // UseBillingAddress if the address should be taken from billing (only relevant for type address) UseBillingAddress bool // Code is an optional identifier of this location/destination Code string }
DeliveryLocation hold information about where the items should be delivered
type ExistingCustomerData ¶
type ExistingCustomerData struct { // ID of the customer ID string }
ExistingCustomerData value object
type GiftCardAndVoucherBehaviour ¶
type GiftCardAndVoucherBehaviour interface {
ApplyAny(ctx context.Context, cart *Cart, anyCode string) (*Cart, DeferEvents, error)
}
GiftCardAndVoucherBehaviour - additional interface that can be implemented to support generic code entry (which can either be voucher or giftcard)
type GiftCardBehaviour ¶
type GiftCardBehaviour interface { ApplyGiftCard(ctx context.Context, cart *Cart, giftCardCode string) (*Cart, DeferEvents, error) RemoveGiftCard(ctx context.Context, cart *Cart, giftCardCode string) (*Cart, DeferEvents, error) }
GiftCardBehaviour - additional interface that can be implemented to support GiftCard features
type GuestCartService ¶
type GuestCartService interface { // GetModifyBehaviour gets the behaviour for the guest cart service GetModifyBehaviour(context.Context) (ModifyBehaviour, error) // GetCart for guest by unique cart id GetCart(ctx context.Context, cartID string) (*Cart, error) // GetNewCart - should return a new guest cart (including the id of the cart) GetNewCart(ctx context.Context) (*Cart, error) // RestoreCart restores a previously used guest cart with all its content. // Depending on the used adapter this can lead to a new Cart.ID // Deprecated: Implement CompleteBehaviour instead RestoreCart(ctx context.Context, cart Cart) (*Cart, error) }
GuestCartService interface - Secondary PORT
type InvalidateCartEvent ¶
InvalidateCartEvent value object
type Item ¶
type Item struct { // ID of the item - needs to be unique over the whole cart ID string // ExternalReference can be used by cart service implementations to separate the representation in an external // cart service from the unique item ID ExternalReference string // MarketplaceCode is the identifier for the product MarketplaceCode string // VariantMarketPlaceCode is used for Configurable products VariantMarketPlaceCode string ProductName string BundleConfig productDomain.BundleConfiguration // Source Id of where the items should be initial picked - This is set by the SourcingLogic SourceID string Qty int AdditionalData map[string]string // SinglePriceGross is the gross price (incl. taxes) for a single product SinglePriceGross priceDomain.Price // SinglePriceNet is the net price (excl. taxes) for a single product SinglePriceNet priceDomain.Price // RowPriceGross is the price incl. taxes for the whole Qty of products RowPriceGross priceDomain.Price // RowPriceGrossWithDiscount is the price incl. taxes with deducted discounts for the whole Qty of products // This is in most cases the final price for the customer to pay RowPriceGrossWithDiscount priceDomain.Price // RowPriceGrossWithItemRelatedDiscount is the price incl. taxes with deducted item related discounts for the whole Qty of products RowPriceGrossWithItemRelatedDiscount priceDomain.Price // RowPriceNet is the price excl. taxes for the whole Qty of products RowPriceNet priceDomain.Price // RowPriceNetWithDiscount is the discounted net price for the whole Qty of products RowPriceNetWithDiscount priceDomain.Price // RowPriceNetWithItemRelatedDiscount is the price excl. taxes with deducted item related discounts for the whole Qty of products RowPriceNetWithItemRelatedDiscount priceDomain.Price // RowTaxes is a list of all taxes applied for the given Qty of products RowTaxes Taxes // AppliedDiscounts contains the details about the discounts applied to this item - they can be "itemrelated" or not // itemrelated would be e.g. special price, buy 3 pay 2 // non-itemrelated would be e.g. 10% on everything AppliedDiscounts AppliedDiscounts // TotalDiscountAmount is the sum of all applied discounts (aka the savings for the customer) TotalDiscountAmount priceDomain.Price // ItemRelatedDiscountAmount is the sum of all itemrelated Discounts ItemRelatedDiscountAmount priceDomain.Price // NonItemRelatedDiscountAmount is the sum of non-itemrelated Discounts where IsItemRelated = false NonItemRelatedDiscountAmount priceDomain.Price }
Item for Cart
func (Item) AdditionalDataKeys ¶
AdditionalDataKeys lists all available keys
func (Item) AdditionalDataValues ¶
AdditionalDataValues lists all values
func (Item) GetAdditionalData ¶
GetAdditionalData returns a specified attribute
func (Item) HasAdditionalDataKey ¶
HasAdditionalDataKey checks if an attribute is available
func (*Item) HasAppliedDiscounts ¶
HasAppliedDiscounts check whether there are any discounts currently applied to the item
func (*Item) MergeDiscounts ¶
func (i *Item) MergeDiscounts() (AppliedDiscounts, error)
MergeDiscounts parses discounts of a single item All discounts with the same campaign code are aggregated and returned as one with a summed price
func (Item) TotalTaxAmount ¶
func (i Item) TotalTaxAmount() priceDomain.Price
TotalTaxAmount is the sum of all applied taxes for the whole Qty of products
type ItemSplitter ¶
type ItemSplitter struct {
// contains filtered or unexported fields
}
ItemSplitter used to split an item
func (*ItemSplitter) SplitInSingleQtyItems ¶
func (s *ItemSplitter) SplitInSingleQtyItems(givenItem Item) ([]Item, error)
SplitInSingleQtyItems the given item into multiple items with Qty 1 and make sure the sum of the items prices matches by using SplitInPayables
type ItemUpdateCommand ¶
type ItemUpdateCommand struct { // SourceID of where the items should be initially picked from - This is set by the SourcingLogic SourceID *string // Qty contains the item quantity Qty *int // AdditionalData contains item related data AdditionalData map[string]string // Mandatory field: ItemID is only for identifying the item. ItemID string // BundleConfiguration contains an updated config of a bundle BundleConfiguration productDomain.BundleConfiguration }
ItemUpdateCommand defines the update item command
type ModifyBehaviour ¶
type ModifyBehaviour interface { DeleteItem(ctx context.Context, cart *Cart, itemID string, deliveryCode string) (*Cart, DeferEvents, error) UpdateItem(ctx context.Context, cart *Cart, itemUpdateCommand ItemUpdateCommand) (*Cart, DeferEvents, error) UpdateItems(ctx context.Context, cart *Cart, itemUpdateCommands []ItemUpdateCommand) (*Cart, DeferEvents, error) AddToCart(ctx context.Context, cart *Cart, deliveryCode string, addRequest AddRequest) (*Cart, DeferEvents, error) CleanCart(ctx context.Context, cart *Cart) (*Cart, DeferEvents, error) CleanDelivery(ctx context.Context, cart *Cart, deliveryCode string) (*Cart, DeferEvents, error) UpdatePurchaser(ctx context.Context, cart *Cart, purchaser *Person, additionalData *AdditionalData) (*Cart, DeferEvents, error) UpdateAdditionalData(ctx context.Context, cart *Cart, additionalData *AdditionalData) (*Cart, DeferEvents, error) UpdatePaymentSelection(ctx context.Context, cart *Cart, paymentSelection PaymentSelection) (*Cart, DeferEvents, error) UpdateDeliveryInfo(ctx context.Context, cart *Cart, deliveryCode string, deliveryInfo DeliveryInfoUpdateCommand) (*Cart, DeferEvents, error) UpdateBillingAddress(ctx context.Context, cart *Cart, billingAddress Address) (*Cart, DeferEvents, error) UpdateDeliveryInfoAdditionalData(ctx context.Context, cart *Cart, deliveryCode string, additionalData *AdditionalData) (*Cart, DeferEvents, error) ApplyVoucher(ctx context.Context, cart *Cart, couponCode string) (*Cart, DeferEvents, error) RemoveVoucher(ctx context.Context, cart *Cart, couponCode string) (*Cart, DeferEvents, error) }
ModifyBehaviour is a interface that can be implemented by other packages to provide cart actions This port can not be registered directly but is provided by the registered "GuestCartService"
type PaymentSelection ¶
type PaymentSelection interface { Gateway() string // ChargeSplits - the selected split per ChargeType and PaymentMethod CartSplit() PaymentSplit // ChargeSplits - the selected split per ChargeType and PaymentMethod ItemSplit() PaymentSplitByItem TotalValue() price.Price MethodByType(string) string IdempotencyKey() string GenerateNewIdempotencyKey() (PaymentSelection, error) }
PaymentSelection value object - that represents the payment selection on the cart
func NewDefaultPaymentSelection ¶
func NewDefaultPaymentSelection(gateway string, chargeTypeToPaymentMethod map[string]string, cart Cart) (PaymentSelection, error)
NewDefaultPaymentSelection returns a PaymentSelection that can be used to update the cart is able to include gift card charges if applied to cart
func NewPaymentSelection ¶
func NewPaymentSelection(gateway string, chargedItems PaymentSplitByItem) PaymentSelection
NewPaymentSelection - with the passed PaymentSplitByItem
func RemoveZeroCharges ¶
func RemoveZeroCharges(selection PaymentSelection, chargeTypeToPaymentMethod map[string]string) PaymentSelection
RemoveZeroCharges removes charges which have an value of zero from selection as they are necessary for our internal calculations but not for external clients, we assume zero charges are ignored moreover charges are transformed to pay ables
type PaymentSplit ¶
type PaymentSplit map[SplitQualifier]price.Charge
PaymentSplit represents the Charges qualified by Charge Type, Charge Reference and Payment Method
func (PaymentSplit) ChargesByType ¶
func (s PaymentSplit) ChargesByType() price.Charges
ChargesByType returns Charges (a list of Charges summed by Type)
func (PaymentSplit) MarshalJSON ¶
func (s PaymentSplit) MarshalJSON() ([]byte, error)
MarshalJSON serialize to json
func (PaymentSplit) TotalValue ¶
func (s PaymentSplit) TotalValue() price.Price
TotalValue returns the sum of the valued Price in the included Charges in this Split
func (*PaymentSplit) UnmarshalJSON ¶
func (s *PaymentSplit) UnmarshalJSON(data []byte) error
UnmarshalJSON deserialize from json
type PaymentSplitByItem ¶
type PaymentSplitByItem struct { CartItems map[string]PaymentSplit ShippingItems map[string]PaymentSplit TotalItems map[string]PaymentSplit }
PaymentSplitByItem - similar to value object that contains items of the different possible types, that have a price
func (PaymentSplitByItem) Sum ¶
func (c PaymentSplitByItem) Sum() PaymentSplit
Sum returns the resulting Split after sum all the included item split
type PaymentSplitByItemBuilder ¶
type PaymentSplitByItemBuilder struct {
// contains filtered or unexported fields
}
PaymentSplitByItemBuilder - Builder to get valid PaymentSplitByItem instances
func (*PaymentSplitByItemBuilder) AddCartItem ¶
func (pb *PaymentSplitByItemBuilder) AddCartItem(id string, method string, charge price.Charge) *PaymentSplitByItemBuilder
AddCartItem adds a cart items charge to the PaymentSplitByItem
func (*PaymentSplitByItemBuilder) AddShippingItem ¶
func (pb *PaymentSplitByItemBuilder) AddShippingItem(deliveryCode string, method string, charge price.Charge) *PaymentSplitByItemBuilder
AddShippingItem adds shipping charge
func (*PaymentSplitByItemBuilder) AddTotalItem ¶
func (pb *PaymentSplitByItemBuilder) AddTotalItem(totalType string, method string, charge price.Charge) *PaymentSplitByItemBuilder
AddTotalItem adds total item charge
func (*PaymentSplitByItemBuilder) Build ¶
func (pb *PaymentSplitByItemBuilder) Build() PaymentSplitByItem
Build returns the instance of PaymentSplitByItem
type PaymentSplitService ¶
type PaymentSplitService struct{}
PaymentSplitService enables the creation of a PaymentSplitByItem following different payment methods
func (PaymentSplitService) SplitWithGiftCards ¶
func (service PaymentSplitService) SplitWithGiftCards(chargeTypeToPaymentMethod map[string]string, items PricedItems, cards AppliedGiftCards) (*PaymentSplitByItem, error)
SplitWithGiftCards calculates a payment selection based on given method, priced items and applied gift cards
type Person ¶
type Person struct { Address *Address PersonalDetails PersonalDetails // ExistingCustomerData if the current purchaser is an existing customer - this contains infos about existing customer ExistingCustomerData *ExistingCustomerData }
Person value object
type PersonalDetails ¶
type PersonalDetails struct { DateOfBirth string PassportCountry string PassportNumber string Nationality string }
PersonalDetails value object
type PricedItems ¶
type PricedItems struct {
// contains filtered or unexported fields
}
PricedItems - value object that contains items of the different possible types, that have a price
func (PricedItems) CartItems ¶
func (p PricedItems) CartItems() map[string]domain.Price
CartItems returns the Price per cartItems - map key is cart item ID
func (PricedItems) ShippingItems ¶
func (p PricedItems) ShippingItems() map[string]domain.Price
ShippingItems returns the Price per ShippingItems - map key is delivery code
func (PricedItems) Sum ¶
func (p PricedItems) Sum() domain.Price
Sum returns Sum of all items in this struct
func (PricedItems) TotalItems ¶
func (p PricedItems) TotalItems() map[string]domain.Price
TotalItems returns the Price per Totalitem - map key is total type
type ShippingItem ¶
type ShippingItem struct { Title string PriceNet priceDomain.Price PriceNetWithDiscounts priceDomain.Price PriceGross priceDomain.Price PriceGrossWithDiscounts priceDomain.Price TaxAmount priceDomain.Price AppliedDiscounts AppliedDiscounts }
ShippingItem represents shipping costs that need to be paid by the customer
func (*ShippingItem) HasAppliedDiscounts ¶
func (s *ShippingItem) HasAppliedDiscounts() (bool, error)
HasAppliedDiscounts checks whether there are any discounts currently applied to the shipping item
func (*ShippingItem) MergeDiscounts ¶
func (s *ShippingItem) MergeDiscounts() (AppliedDiscounts, error)
MergeDiscounts parses discounts of a shipping item All discounts with the same campaign code are aggregated and returned as one with a summed price
func (*ShippingItem) TotalWithDiscountInclTax ¶
func (s *ShippingItem) TotalWithDiscountInclTax() domain.Price
TotalWithDiscountInclTax returns the final shipping price to pay Deprecated use public field PriceGrossWithDiscounts
type SplitQualifier ¶
SplitQualifier qualifies by Charge Type, Charge Reference and Payment Method
type Taxes ¶
type Taxes []Tax
Taxes is a list of Tax
func (Taxes) AddTaxWithMerge ¶
AddTaxWithMerge returns new Taxes with this Tax added
func (Taxes) AddTaxesWithMerge ¶
AddTaxesWithMerge returns new Taxes with the given Taxes all added or merged in
func (Taxes) TotalAmount ¶
TotalAmount returns the sum of all taxes as price
type WithDiscount ¶
type WithDiscount interface { HasAppliedDiscounts() (bool, error) MergeDiscounts() (AppliedDiscounts, error) }
WithDiscount interface for a cart that is able to handle discounts
type WithGiftCard ¶
WithGiftCard interface for a cart that is able to handle gift cards