public async Task <CartExtendedResponse> Handle(UpdateCartItemQuantityCommand command, CancellationToken cancellationToken) { var cartDetail = await _repository.GetAsync(command.CartId); if (command.IsAddOperation) { cartDetail.Items.FirstOrDefault(_ => _.CartItemId == command.CartItemId)?.IncreaseQuantity(); } else { cartDetail.Items.FirstOrDefault(_ => _.CartItemId == command.CartItemId)?.DecreaseQuantity(); } var cartItemsList = cartDetail.Items.ToList(); cartItemsList.RemoveAll(x => x.Quantity <= 0); cartDetail.Items = cartItemsList; await _repository.AddOrUpdateAsync(cartDetail); var response = _mapper.Map <CartExtendedResponse>(cartDetail); var tasks = response.Items .Select(async x => await _catalogService.EnrichCartItem(x, cancellationToken)); response.Items = await Task.WhenAll(tasks); return(response); }
public async Task <CartExtendedResponse> Handle(CreateCartCommand request, CancellationToken cancellationToken) { var entity = new CartSession { Id = Guid.NewGuid().ToString(), Items = request.ItemsIds.Select(item => new CartItem { CartItemId = new Guid(item), Quantity = 1, }).ToList(), User = new CartUser { Email = request.UserEmail, }, ValidityDate = DateTimeOffset.Now.AddMonths(2), }; var result = await _repository.AddOrUpdateAsync(entity); var response = _mapper.Map <CartExtendedResponse>(result); var tasks = response.Items .Select(async x => await _catalogService.EnrichCartItem(x, cancellationToken)); response.Items = await Task.WhenAll(tasks); return(response); }
private async Task RemoveItemsInCart(string itemToRemove, Entities.CartSession cartSession) { if (string.IsNullOrEmpty(itemToRemove)) { return; } var toDelete = cartSession?.Items?.Where(x => x.CartItemId.ToString() == itemToRemove).ToList(); if (toDelete == null || toDelete.Count == 0) { return; } foreach (var item in toDelete) { cartSession.Items?.Remove(item); } await _cartRepository.AddOrUpdateAsync(cartSession); }