Example #1
0
        public async Task <Cart> UpdateProductQuantity(string cartId, UpdateCartProductDto dto)
        {
            var cart = await GetCartById(cartId);

            if (cart == null)
            {
                return(null);
            }
            var product = await _productService.GetProductById(dto.ProductId);

            if (product == null)
            {
                return(null);
            }
            var isProductExistInCart = cart.Products.Any(p => p.ProductId == dto.ProductId);

            if (!isProductExistInCart)
            {
                return(cart);
            }

            var cartProduct = cart.Products.FirstOrDefault(cp => cp.ProductId == dto.ProductId && cp.ID == dto.CartProductId);

            if (cartProduct == null)
            {
                return(cart);
            }
            cartProduct.Quantity   = dto.Quantity;
            cartProduct.UnitPrice  = product.Pricing.Price;
            cartProduct.TotalPrice = cartProduct.UnitPrice * (decimal)dto.Quantity;
            cart.Quantity          = cart.Products.Sum(s => s.Quantity);
            cart.TotalPrice        = cart.Products.Sum(s => s.TotalPrice);

            var update = Builders <Cart> .Update
                         .Set("Quantity", cart.Quantity)
                         .Set("TotalPrice", cart.TotalPrice)
                         .Set("UpdatedAt", cart.UpdatedAt)
                         .Set("Products", cart.Products);

            var options = new FindOneAndUpdateOptions <Cart, Cart> {
                ReturnDocument = ReturnDocument.After
            };
            var updatedCart = await _carts.FindOneAndUpdateAsync <Cart, Cart>(r => r.ID == cartId, update, options);

            updatedCart = await _populateCartProductsImage(updatedCart);

            return(updatedCart);
        }
        public async Task <ActionResult <ApiResponse <Cart> > > UpdateProductQuantity(string cartId, UpdateCartProductDto dto)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(cartId))
                {
                    return(BadRequest("Cart ID is empty."));
                }
                var updatedCart = await _cartService.UpdateProductQuantity(cartId, dto);

                return(updatedCart.CreateSuccessResponse("Cart updated successfully!"));
            }
            catch (Exception exception)
            {
                return(BadRequest(exception.CreateErrorResponse()));
            }
        }