Ejemplo n.º 1
0
        public async Task <OrderModel> CreateOrderAsync(OrderModelItem orderModelItem, string userId)
        {
            var responseModel = new OrderModel();

            if (!orderModelItem.OrderItems.Any())
            {
                responseModel.Errors.Add(Constants.Errors.InvalidData);
                return(responseModel);
            }

            if (!long.TryParse(userId, out long _userId) || _userId == 0)
            {
                responseModel.Errors.Add(Constants.Errors.UserNotFound);
                return(responseModel);
            }

            var orderItems = new List <OrderItem>();

            var user = await _userRepository.GetUserByIdAsync(_userId);

            if (user == null)
            {
                responseModel.Errors.Add(Constants.Errors.UserNotFound);
                return(responseModel);
            }
            var payment = new Payment()
            {
                TransactionId = null
            };

            var paymentId = await _paymentRepository.CreateAsync(payment);

            var order = new Order()
            {
                Amount    = orderModelItem.OrderItems.Sum(x => x.Price * x.Count),
                PaymentId = paymentId,
                UserId    = user.Id
            };

            var orderId = await _orderRepository.CreateAsync(order);

            foreach (var orderPrintingEdition in orderModelItem.OrderItems)
            {
                var orderItem = orderPrintingEdition.MapToEntity();
                orderItem.OrderId = orderId;
                orderItems.Add(orderItem);
            }

            var orderItemsResult = await _orderItemRepository.CreateOrderItems(orderItems.ToArray());

            responseModel.Items.Add(new OrderModelItem
            {
                Id = orderId
            });

            return(responseModel);
        }