public virtual async Task <IShoppingCartBuilder> GetOrCreateCartAsync(string storeId, string customerId, string cartName, string currency, string cultureName) { var criteria = new ShoppingCartSearchCriteria { CustomerId = customerId, StoreId = storeId, Name = cartName, Currency = currency }; var searchResult = await _shoppingCartSearchService.SearchCartAsync(criteria); Cart = searchResult.Results.FirstOrDefault(); if (Cart == null) { //TODO //var customerContact = _memberService.GetByIds(new[] { customerId }).OfType<Contact>().FirstOrDefault(); Cart = AbstractTypeFactory <ShoppingCart> .TryCreateInstance(); Cart.Name = cartName; Cart.LanguageCode = cultureName; Cart.Currency = currency; Cart.CustomerId = customerId; //Cart.CustomerName = customerContact != null ? customerContact.FullName : "Anonymous"; //Cart.IsAnonymous = customerContact == null; Cart.StoreId = storeId; await _shoppingCartService.SaveChangesAsync(new[] { Cart }); Cart = await _shoppingCartService.GetByIdAsync(Cart.Id); } return(this); }
public async Task <CartAggregate> GetCartAsync(string cartName, string storeId, string userId, string language, string currencyCode, string type = null, string responseGroup = null) { var criteria = new ShoppingCartSearchCriteria { StoreId = storeId, // IMPORTANT! Need to specify customerId, otherwise any user cart could be returned while we expect anonymous in this case. CustomerId = userId ?? AnonymousUser.UserName, Name = cartName, Currency = currencyCode, Type = type, ResponseGroup = EnumUtility.SafeParseFlags(responseGroup, CartResponseGroup.Full).ToString() }; var cartSearchResult = await _shoppingCartSearchService.SearchCartAsync(criteria); var cart = cartSearchResult.Results.FirstOrDefault(); if (cart != null) { return(await InnerGetCartAggregateFromCartAsync(cart.Clone() as ShoppingCart, language)); } return(null); }
public async Task <ActionResult <GenericSearchResult <ShoppingCart> > > Search(ShoppingCartSearchCriteria criteria) { var result = await _searchService.SearchCartAsync(criteria); return(Ok(result)); }