Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }