public virtual async Task <IEnumerable <ShoppingCart> > GetByIdsAsync(string[] cartIds, string responseGroup = null) { var retVal = new List <ShoppingCart>(); var cacheKey = CacheKey.With(GetType(), "GetByIdsAsync", string.Join("-", cartIds), responseGroup); return(await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { using (var repository = _repositoryFactory()) { //Disable DBContext change tracking for better performance repository.DisableChangesTracking(); var cartEntities = await repository.GetShoppingCartsByIdsAsync(cartIds, responseGroup); foreach (var cartEntity in cartEntities) { var cart = cartEntity.ToModel(AbstractTypeFactory <ShoppingCart> .TryCreateInstance()); //Calculate totals only for full responseGroup if (responseGroup == null) { _totalsCalculator.CalculateTotals(cart); } retVal.Add(cart); cacheEntry.AddExpirationToken(CartCacheRegion.CreateChangeToken(cart)); } } await _dynamicPropertyService.LoadDynamicPropertyValuesAsync(retVal.ToArray <IHasDynamicProperties>()); return retVal; })); }
public virtual async Task <ShoppingCart[]> GetByIdsAsync(string[] cartIds, string responseGroup = null) { var retVal = new List <ShoppingCart>(); var cacheKey = CacheKey.With(GetType(), "GetByIdsAsync", string.Join("-", cartIds), responseGroup); var result = await _platformMemoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { using (var repository = _repositoryFactory()) { //Disable DBContext change tracking for better performance repository.DisableChangesTracking(); cacheEntry.AddExpirationToken(CartCacheRegion.CreateChangeToken(cartIds)); var cartEntities = await repository.GetShoppingCartsByIdsAsync(cartIds, responseGroup); foreach (var cartEntity in cartEntities) { var cart = cartEntity.ToModel(AbstractTypeFactory <ShoppingCart> .TryCreateInstance()); //Calculate totals only for full responseGroup if (responseGroup == null) { _totalsCalculator.CalculateTotals(cart); } cart.ReduceDetails(responseGroup); retVal.Add(cart); } } return(retVal); }); return(result.Select(x => x.Clone() as ShoppingCart).ToArray()); }
public virtual async Task <CartAggregate> RecalculateAsync() { EnsureCartExists(); var promotionEvalResult = await EvaluatePromotionsAsync(); Cart.ApplyRewards(promotionEvalResult.Rewards); var taxRates = await EvaluateTaxesAsync(); Cart.ApplyTaxRates(taxRates); _cartTotalsCalculator.CalculateTotals(Cart); return(this); }
public ActionResult <ShoppingCart> RecalculateTotals([FromBody] ShoppingCart cart) { _cartTotalsCalculator.CalculateTotals(cart); return(Ok(cart)); }