public async Task <ActionResult> CreateOrder([FromBody] InputOrderCreating orderFCD) { var user = await _userRepository.GetUser(orderFCD.userId ?? orderFCD.userId.Value); if (user == null) { return(NotFound()); } var(statusCode, productEntities) = await ValidateProduct(orderFCD); if (!ModelState.IsValid) { return(StatusCode(statusCode.StatusCode)); } Product p; decimal total = 0; /* talves da para melhorar esse trecho, ficou assim devido não saber direito a qual sera a forma de dados * que sera enviada pelo cliente-side*/ var arrayProduct = orderFCD.ProductsAddedOrder.ToArray(); for (int i = 0; i < arrayProduct.Length; i++) { p = productEntities.First(p => p.Id == arrayProduct[i].Id); if (p.Quantity - arrayProduct[i].Quantity >= 0) { p.Quantity -= arrayProduct[i].Quantity; total += arrayProduct[i].Quantity * p.Price; arrayProduct[i].price = p.Price; } } var products = arrayProduct.ToList(); var order = new Order() { User = user, Date = DateTime.Now, Total = total }; if (!await _orderRepository.CreateOrder(products, order) || !await _productRepository.Save()) { ModelState.AddModelError("", "Ocorreu um erro ao salvar o Pedido"); return(StatusCode(500, ModelState)); } return(CreatedAtRoute("GetOrder", new { orderId = order.Id }, order)); }
private async Task <(StatusCodeResult, ICollection <Product>)> ValidateProduct(InputOrderCreating order) { StatusCodeResult statusCodeResult = null; var pIds = new List <Guid>(); foreach (var item in order.ProductsAddedOrder) { pIds.Add(item.Id); } var products = await _productRepository.GetProductsByIds(pIds); if (pIds.Count != products.Count) { ModelState.AddModelError("", "O produto não existe"); statusCodeResult = StatusCode(404); } return(statusCodeResult, products); }