public override async Task <AddItemIntoShoppingCartResponse> AddItemIntoShoppingCart(IAsyncStreamReader <AddItemIntoShoppingCartRequest> requestStream, ServerCallContext context) { while (await requestStream.MoveNext()) { // Get sc if exist or not // Check item if exist in sc or not // if item exist +1 quantity // if not exist add new item into sc // check discount and set the item price var shoppingCart = await _shoppingCartDbContext.ShoppingCart.FirstOrDefaultAsync(s => s.UserName == requestStream.Current.Username); if (shoppingCart == null) { throw new RpcException(new Status(StatusCode.NotFound, $"ShoppingCart with UserName={requestStream.Current.Username} is not found.")); } var newAddedCartItem = _mapper.Map <ShoppingCartItem>(requestStream.Current.NewCartItem); var cartItem = shoppingCart.Items.FirstOrDefault(i => i.ProductId == newAddedCartItem.ProductId); if (null != cartItem) { cartItem.Quantity++; } else { // GRPC CALL DISCOUNT SERVICE -- check discount and set the item price var discount = await _discountService.GetDiscount(requestStream.Current.DiscountCode); newAddedCartItem.Price -= discount.Amount; shoppingCart.Items.Add(newAddedCartItem); } } var insertCount = await _shoppingCartDbContext.SaveChangesAsync(); var response = new AddItemIntoShoppingCartResponse { Success = insertCount > 0, InsertCount = insertCount }; return(response); }
public override async Task <AddItemIntoShoppingCartResponse> AddItemIntoShoppingCart( IAsyncStreamReader <AddItemIntoShoppingCartRequest> requestStream, ServerCallContext context) { await foreach (var item in requestStream.ReadAllAsync()) { var shoppingCart = await _shoppingCartContext .ShoppingCarts .FirstOrDefaultAsync(r => r.UserName == item.Username); if (shoppingCart == null) { throw new RpcException(new Status(StatusCode.NotFound, "There is no shoppingCart")); } var newAddedCartItem = _mapper.Map <ShoppingCartItem>(item.NewCartItem); var cartItem = shoppingCart.Items .FirstOrDefault(r => r.ProductId == newAddedCartItem.ProductId); if (cartItem != null) { cartItem.Quantity++; } else { var discountPercent = await _discountService.GetDiscount(item.DiscountCode); float discount = discountPercent.Amount / 100; newAddedCartItem.Price *= discount; shoppingCart.Items.Add(newAddedCartItem); } } var insertCount = await _shoppingCartContext.SaveChangesAsync(); var response = new AddItemIntoShoppingCartResponse { Success = insertCount > 0, InsertCount = insertCount }; return(response); }
public override async Task <AddItemToShoppingCartResponse> AddItemToShoppingCart(IAsyncStreamReader <AddItemToShoppingCartRequest> requestStream, ServerCallContext context) { while (await requestStream.MoveNext()) { var shoppingCart = await _shoppingCartContext.ShoppingCart.FirstOrDefaultAsync(p => p.UserName == requestStream.Current.Username); if (shoppingCart == null) { throw new RpcException(new Status(StatusCode.NotFound, $"ShoppingCart with UserName={requestStream.Current.Username}")); } var newAddedCartItem = _mapper.Map <ShoppingCartItem>(requestStream.Current.NewCartItem); var cartItem = shoppingCart.Items.FirstOrDefault(p => p.ProductId == newAddedCartItem.ProductId); if (cartItem != null) { cartItem.Quantity++; } else { var discount = await _discountService.GetDiscount(requestStream.Current.DiscountCode); newAddedCartItem.Price -= discount.Amount; shoppingCart.Items.Add(newAddedCartItem); } } var insertCount = await _shoppingCartContext.SaveChangesAsync(); var response = new AddItemToShoppingCartResponse { InsertCount = insertCount, Success = insertCount > 0 }; return(response); }