public async Task <IActionResult> Update([FromRoute] int productId, [FromForm] OrderItemUpdateViewModel viewModel)
        {
            if (!HttpContext.Session.TryGetValue("@order-number", out var value))
            {
                return(RedirectToAction("Index", "Product"));
            }

            if (!ModelState.IsValid)
            {
                TempData["Failure"] = "Quantidade informada inválida";

                return(RedirectToAction("Show", "ShoppingCart"));
            }

            var orderNumber = new Guid(value);

            var result = await _orderService.UpdateItem(orderNumber, productId, viewModel);

            if (result.IsFailure)
            {
                TempData["Failure"] = "Não foi possível alterar a quantidade";

                return(RedirectToAction("Show", "ShoppingCart"));
            }

            TempData["Success"] = "Quantidade alterada";

            var countResult = await _orderService.CountNumberOfItems(orderNumber);

            if (countResult.IsFailure)
            {
                TempData["Failure"] = "Não foi possível atualizar o carrinho";

                return(RedirectToAction("Show", "ShoppingCart"));
            }

            HttpContext.Session.SetInt32("@order-items-count", countResult.Value);

            return(RedirectToAction("Show", "ShoppingCart"));
        }
        public async Task <Result> UpdateItem(Guid orderNumber, int productId, OrderItemUpdateViewModel item)
        {
            try
            {
                var client = _clientFactory.CreateClient("Api");

                var json = JsonConvert.SerializeObject(item);

                var content = new StringContent(json, Encoding.UTF8, "application/json");

                var response = await client.PutAsync($"Order/{orderNumber}/Item/{productId}", content);

                response.EnsureSuccessStatusCode();

                return(Result.Ok());
            }
            catch (HttpRequestException ex)
            {
                _logger.LogError(ex, string.Empty);

                return(Result.Fail(ex.Message));
            }
        }
        public ActionResult Update([FromRoute] Guid number, [FromRoute] int productId, [FromBody] OrderItemUpdateViewModel viewModel)
        {
            var maybeOrder = _orderRepository.FindByNumber(number);

            if (!maybeOrder.HasValue)
            {
                return(NotFound());
            }

            var order = maybeOrder.Value;

            Maybe <OrderItem> maybeOrderItem = order.Items.FirstOrDefault(it => it.ProductId == productId);

            if (!maybeOrderItem.HasValue)
            {
                return(NotFound());
            }

            maybeOrderItem.Value.Quantity = viewModel.Quantity;

            _uow.Commit();

            return(NoContent());
        }