Exemple #1
0
        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));
        }
Exemple #2
0
        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);
        }