Esempio n. 1
0
        public async Task <IActionResult> PostOrderRouteAsync(
            [FromBody] OrderForCreationUiModel orderForCreationUiModel)
        {
            var userAudit = await _inquiryUserProcessor.GetUserByUserIdAsync(GetUserIdFromClaims());

            if (userAudit == null)
            {
                return(BadRequest("ERROR_ORDER_USER_NOT_EXIST"));
            }

            var newCreatedOrder =
                await _createOrderProcessor.CreateOrderAsync(GetUserIdFromClaims(), orderForCreationUiModel);

            switch (newCreatedOrder.Message)
            {
            case ("SUCCESS_CREATION"):
            {
                Log.Information(
                    $"--Method:PostOrderRouteAsync -- Message:ORDER_CREATION_SUCCESSFULLY -- " +
                    $"Datetime:{DateTime.Now}");
                return(Created(nameof(PostOrderRouteAsync), newCreatedOrder));
            }

            case ("UNKNOWN_ERROR"):
            {
                Log.Error(
                    $"--Method:PostOrderRouteAsync -- Message:ERROR_CREATION_NEW_ORDER -- " +
                    $"Datetime:{DateTime.Now}");
                return(BadRequest(new { errorMessage = "ERROR_CREATION_NEW_ORDER" }));
            }
            }

            return(NotFound());
        }
        public Task <OrderUiModel> CreateOrderAsync(Guid idUser, OrderForCreationUiModel orderForCreationUiModel)
        {
            var response =
                new OrderUiModel()
            {
                Message = "START_CREATION"
            };

            if (orderForCreationUiModel == null)
            {
                response.Message = "ERROR_INVALID_ORDER_MODEL";
                return(Task.Run(() => response));
            }

            var orderToBeCreated = new Order();

            try
            {
                orderToBeCreated.InjectWithInitialAttributes(
                    $"New order for Products:{orderForCreationUiModel.Products.Count}");

                var userToBeInjected = _userRepository.FindBy(idUser);

                orderToBeCreated.InjectWithUser(userToBeInjected);

                foreach (var product in orderForCreationUiModel.Products)
                {
                    var productToBeInjected = _productRepository.FindBy(product.ProductId);
                    if (productToBeInjected != null)
                    {
                        OrderItem newOrderItemToBeInjected = new OrderItem()
                        {
                            Product  = productToBeInjected,
                            Quantity = product.ProductQty
                        };

                        orderToBeCreated.InjectedWithOrderItem(newOrderItemToBeInjected);
                        orderToBeCreated.CalcNewTotals(product.ProductQty, productToBeInjected.Price);
                    }
                }

                MakeOrderPersistent(orderToBeCreated);

                response         = _autoMapper.Map <OrderUiModel>(_orderRepository.FindOrderForUserByOrderId(idUser, orderToBeCreated.Id));
                response.Message = "SUCCESS_CREATION";
            }
            catch (Exception exxx)
            {
                response.Message = "UNKNOWN_ERROR";
                Log.Error(
                    $"Create Order" +
                    $"--CreateOrder--  @fail@ [CreateOrderProcessor]. " +
                    $"@innerfault:{exxx.Message} and {exxx.InnerException}");
            }

            return(Task.Run(() => response));
        }