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())); } }