public async Task <int> SaveOrderAsync(int customerId, string cartId, int shippingId, int taxId) { customerId.ThrowArgumentExceptionIfLessThanOne(nameof(customerId)); cartId.ThrowArgumentNullIfNullOrEmpty(nameof(cartId)); shippingId.ThrowArgumentExceptionIfLessThanOne(nameof(shippingId)); taxId.ThrowArgumentExceptionIfLessThanOne(nameof(taxId)); var order = new Orders { TotalAmount = await _shoppingCartService.GetCartTotalAmountAsync(cartId), Status = 0, ShippingId = shippingId, TaxId = taxId, CustomerId = customerId, CreatedOn = DateTime.Now }; await _orderRepository.Insert(order); // Line items var cartItems = await _shoppingCartService.GetShoppingCartByIdAsync(cartId); var orderDetails = new List <OrderDetail>(); foreach (var cartItem in cartItems) { var orderDetail = new OrderDetail { OrderId = order.OrderId, ItemId = cartItem.ItemId, ProductId = cartItem.ProductId, Attributes = cartItem.Attributes, Quantity = cartItem.Quantity, ProductName = cartItem.Name, UnitCost = decimal.Parse(cartItem.Price) }; orderDetails.Add(orderDetail); } await _orderRepository.AddDetails(orderDetails); //Clear the cart await _shoppingCartService.EmptyCartAsync(cartId); return(order.OrderId); }