public virtual async Task LoadOrCreateNewTransientCartAsync(string cartName, Store store, User user, Language language, Currency currency, string type = null) { var cacheKey = CacheKey.With(GetType(), "LoadOrCreateNewTransientCart", store.Id, cartName, user.Id, currency.Code, type); var needReevaluate = false; Cart = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { needReevaluate = true; var cartSearchCriteria = CreateCartSearchCriteria(cartName, store, user, language, currency, type); var cartSearchResult = await _cartService.SearchCartsAsync(cartSearchCriteria); var cart = cartSearchResult.FirstOrDefault() ?? CreateCart(cartName, store, user, language, currency, type); //Load cart dependencies await PrepareCartAsync(cart, store); //Add expiration token for concrete cart instance cacheEntry.AddExpirationToken(CartCacheRegion.CreateChangeToken(cart)); return(cart); }); if (needReevaluate) { await EvaluatePromotionsAsync(); await EvaluateTaxesAsync(); } }
public virtual async Task RemoveCartAsync() { EnsureCartExists(); //Evict cart from cache CartCacheRegion.ExpireCart(Cart); await _cartService.DeleteCartByIdAsync(Cart.Id); }
public virtual async Task SaveAsync() { EnsureCartExists(); await EvaluatePromotionsAsync(); await EvaluateTaxesAsync(); var cartDto = Cart.ToShoppingCartDto(); if (string.IsNullOrEmpty(cartDto.Id)) { cartDto = await _cartApi.CreateAsync(cartDto); } else { await _cartApi.UpdateAsync(cartDto); } //Evict cart from cache CartCacheRegion.ExpireCart(Cart); cartDto = await _cartApi.GetCartByIdAsync(cartDto.Id); var cart = cartDto.ToShoppingCart(Cart.Currency, Cart.Language, Cart.Customer); await TakeCartAsync(cart); }
public virtual async Task RemoveCartAsync() { EnsureCartExists(); //Evict cart from cache CartCacheRegion.ExpireCart(Cart); await _cartApi.DeleteCartsAsync(new List <string> { Cart.Id }); }
public virtual async Task SaveAsync() { EnsureCartExists(); await EvaluatePromotionsAsync(); await EvaluateTaxesAsync(); var cart = await _cartService.SaveChanges(Cart); //Evict cart from cache CartCacheRegion.ExpireCart(Cart); await TakeCartAsync(cart); }
public virtual async Task LoadOrCreateNewTransientCartAsync(string cartName, Store store, User user, Language language, Currency currency) { var cacheKey = CacheKey.With(GetType(), store.Id, cartName, user.Id, currency.Code); var needReevaluate = false; Cart = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { needReevaluate = true; var cartSearchCriteria = CreateCartSearchCriteria(cartName, store, user, language, currency); var cartSearchResult = await _cartApi.SearchAsync(cartSearchCriteria); var cartDto = cartSearchResult.Results.FirstOrDefault(); var cart = cartDto?.ToShoppingCart(currency, language, user) ?? CreateCart(cartName, store, user, language, currency); //Load cart payment plan with have same id if (store.SubscriptionEnabled) { var productsIds = cart.Items.Select(x => x.ProductId).Distinct().ToArray(); var products = await _catalogService.GetProductsAsync(productsIds, ItemResponseGroup.ItemWithPrices | ItemResponseGroup.ItemWithDiscounts | ItemResponseGroup.Inventory); var paymentPlanIds = new[] { cart.Id }.Concat(cart.Items.Select(x => x.ProductId).Distinct()).ToArray(); var paymentPlans = await _subscriptionService.GetPaymentPlansByIdsAsync(paymentPlanIds); cart.PaymentPlan = paymentPlans.FirstOrDefault(x => x.Id == cart.Id); //Realize this code whith dictionary foreach (var lineItem in cart.Items) { lineItem.Product = products.FirstOrDefault(x => x.Id == lineItem.ProductId); lineItem.PaymentPlan = paymentPlans.FirstOrDefault(x => x.Id == lineItem.ProductId); } } cart.Customer = user; //Add expiration token for concrete cart instance cacheEntry.AddExpirationToken(CartCacheRegion.CreateChangeToken(cart)); return(cart); }); if (needReevaluate) { await EvaluatePromotionsAsync(); await EvaluateTaxesAsync(); } }