public ActionResult Store([FromRoute] Guid number, [FromBody] OrderItemStoreViewModel viewModel) { var maybeOrder = _orderRepository.FindByNumber(number); if (!maybeOrder.HasValue) { return(NotFound()); } var maybeProduct = _productRepository.FindById(viewModel.ProductId); if (!maybeProduct.HasValue) { return(BadRequest()); } var order = maybeOrder.Value; var product = maybeProduct.Value; var orderItem = new OrderItem { OrderNumber = order.Number, ProductId = product.Id, Price = product.Price, Quantity = 1 }; Maybe <OrderItem> maybeOrderItem = order.Items.FirstOrDefault(it => it.Equals(orderItem)); if (maybeOrderItem.HasValue) { maybeOrderItem.Value.Quantity += orderItem.Quantity; _uow.Commit(); return(NoContent()); } order.Items.Add(orderItem); _uow.Commit(); return(NoContent()); }
public async Task <Result> AddItem(Guid orderNumber, OrderItemStoreViewModel 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.PostAsync($"Order/{orderNumber}/Item", content); response.EnsureSuccessStatusCode(); return(Result.Ok()); } catch (HttpRequestException ex) { _logger.LogError(ex, string.Empty); return(Result.Fail(ex.Message)); } }
public async Task <IActionResult> Store([FromRoute] int productId) { if (HttpContext.Session.TryGetValue("@order-number", out var value)) { var orderNumber = new Guid(value); var item = new OrderItemStoreViewModel { ProductId = productId }; var itemResult = await _orderService.AddItem(orderNumber, item); if (itemResult.IsFailure) { TempData["Failure"] = "Não foi possível adicionar o produto no carrinho"; return(RedirectToAction("Index", "Product")); } TempData["Success"] = "Produto adicionado ao carrinho"; var countResult = await _orderService.CountNumberOfItems(orderNumber); if (countResult.IsFailure) { TempData["Failure"] = "Não foi possível atualizar o carrinho"; return(RedirectToAction("Index", "Product")); } HttpContext.Session.SetInt32("@order-items-count", countResult.Value); return(RedirectToAction("Index", "Product")); } var order = new OrderStoreViewModel { Number = Guid.NewGuid() }; var orderCreateResult = await _orderService.Add(order); if (orderCreateResult.IsFailure) { TempData["Failure"] = "Não foi possível adicionar o produto no carrinho"; return(RedirectToAction("Index", "Product")); } HttpContext.Session.Set("@order-number", order.Number.ToByteArray()); var orderItem = new OrderItemStoreViewModel { ProductId = productId }; var orderItemCreateResult = await _orderService.AddItem(order.Number, orderItem); if (orderItemCreateResult.IsFailure) { TempData["Failure"] = "Não foi possível adicionar o produto no carrinho"; return(RedirectToAction("Index", "Product")); } TempData["Success"] = "Produto adicionado ao carrinho"; var orderItemCountResult = await _orderService.CountNumberOfItems(order.Number); if (orderItemCountResult.IsFailure) { TempData["Failure"] = "Não foi possível atualizar o carrinho"; return(RedirectToAction("Index", "Product")); } HttpContext.Session.SetInt32("@order-items-count", orderItemCountResult.Value); return(RedirectToAction("Index", "Product")); }