2022-01-10 Pricing Flow

From Izara Wiki
Revision as of 09:05, 10 January 2022 by Sven the Barbarian (talk | contribs) (Created page with "Service Stack - Products = Filtered List of Sell Offers = * eg: from Browse Catalog == Sorted SearchResult: sellOffer == * Final result expected is a list of Sell Offe...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Service Stack - Products

Filtered List of Sell Offers

  • eg: from Browse Catalog

Sorted SearchResult: sellOffer

  • Final result expected is a list of Sell Offer Ids and their pricing (eg min or max), along with any other fields wanted
  • Original request is sent to SellOffer Search Result service which uses SellOfferManager service to process Logicals and FindData
  • Request might originate higher up, eg Product/VariantProduct level, for pricing the SellOffer level is the important start point
  • sellOffer searchType / sellOffer filterType
  • sellOffer types can have fields maxPrice/minPrice
  • has child searchResult/complexFilter type orderPrice
  • use translateIds to find matching sellOfferIds from orderPrice complexFilter
  • use searchResult/findData's child id structure to copy aggregated price up from orderPrice level to sellOffer level
  • so entry point into pricing flow is begun by orderPrice level filter/requiredData
  • orderPrice level does not need to be sorted, can be a standard searchResult, but sellOffer level could layer sorting on top of the orderPrice searchResult data according to it's needs

SearchResult: orderPrice

Logical: SellOfferManager - orderPrice - maxPrice / minPrice

  • passes on to a sorted searchResult request for orderPrice that has logicalTag = aggregatedSellOfferPrices, sorted by price (ascending)
  • requires sorted aggregatedSellOfferPrices so can perform it's comparison
  • searchResult requiredData is "price" and "status", these will invoke FindData after aggregatedSellOfferPrices complexFilter complete
  • once aggregatedSellOfferPrices completes triggers ProcessLogicalSortedRequest (set callingFlow = this service's ProcessLogicalSortedRequest), which will trigger SortResult's CopyDataToExternalTable lambda
  • CopyDataToExternalTable will copy records to SellOfferManager's LogicalResults table
  • SellOfferManager's CompleteLogicalSortedRequest lambda subscribes to sortResult's CopyDataToExternalTableComplete topic, and completes the Logical request

Logical: SellOfferManager - orderPrice - aggregatedSellOfferPrices

  • passes on to sellOffer complexFilter with child complexFilter type planDeliveryPaymentCombination
  • we add this step to reduce the number of sellOfferIds that we dig prices combinations for, to only sellOfferIds that have a plan that points to given paymentMethodIds/deliveryMethodIds
  • complexFilter will find all unique sellOfferIds that offer requested delivery and payment methods
  • sellOffer complexFilter passes down to planDeliveryPaymentCombination filterType handled by SellOfferPlan service
  • sellOffer complexFilter will trigger FindSellOfferFilterComplete lambda (callingFlow = this service's FindSellOfferFilterComplete)

Logical: SellOfferPlan - planDeliveryPaymentCombination - planDeliveryPaymentCombination

  • invokes sellOfferPlan's FindPlanDeliveryPaymentCombinations lambda

sellOfferPlan - FindPlanDeliveryPaymentCombinations

  • queries graph for all sellOfferPlanId + sellOfferPlanDeliveryMethodLinkId + sellOfferPlanPaymentMethodLinkId combinations that match given paymentMethodIds/deliveryMethodIds
  • saves each combination into it's LogicalResultsData table
  • completes it's logical, which completes the planDeliveryPaymentCombination complexFilter which completes the sellOffer complexFilter, which triggers SellOfferManager's FindSellOfferFilterComplete lambda

SellOfferManager - FindSellOfferFilterComplete

  • receives complexFilterComplete message for sellOffer level complexFilter that lists all unique sellOffers that have planDeliveryPaymentCombination (any combination of given paymentMethodIds/deliveryMethodIds)
  • for each logicalResultMain found, send request to CreatePerSellOfferSortedPriceRequests

SellOfferManager - CreatePerSellOfferSortedPriceRequests

  • for one logicalResultMain, iterates all sellOfferIds found in sellOffer-planDeliveryPaymentCombination complexFilter results
  • passes on to a sorted searchResult request for orderPrice that has logicalTag = sellOfferQuantityLocationIdCombinations, sorted by price (ascending)
  • for each sellOfferId we need an ordered list of prices that come from the different deliverToLocationIds/paymentMethodIds/deliveryMethodIds combinations
  • searchResult requiredData is "price", will invoke FindData after sellOfferQuantityLocationIdCombinations complexFilter complete
  • saves each sellOfferQuantityLocationIdCombinations request into AwaitingMultipleStep for this logicalResultId
  • sends searchResult request to SellOfferManager searchResult service
  • once sellOfferQuantityLocationIdCombinations completes per sellOfferId triggers CreateOrderPriceCombinations (set callingFlow = this service's CreateOrderPriceCombinations)