public async Task <Order> CreateOrder(CreateOrderRequest request) { var order = new Order(); // generate guid id order.Id = Guid.NewGuid().ToString(); order.Status = OrderStatus.Started; // because we're just mapping this to data entity, we don't need a full user yet order.User = new User { Id = request.UserId }; // map to data entity for storage - will only map id, userid, and status var orderDataEntity = _orderMapper.MapToDataEntity(order); foreach (var productRequest in request.ProductIds) { // create 'ordered product' object which represents each product on an order by id and order id var orderedProduct = new OrderedProductDataEntity { OrderId = order.Id, ProductId = productRequest.Key, Quantity = productRequest.Value }; // add each ordered product to the db await _orderRepository.AddProductToOrder(orderedProduct); } // add order to db await _orderRepository.CreateOrder(orderDataEntity); // add products and user to order for returning await ApplyProductsToOrder(order); await ApplyUserToOrder(order, request.UserId); return(order); }
public async Task AddProductToOrder(string orderId, string productId, int quantity) { var orderedProducts = await _orderRepository.GetOrderedProductsByOrderId(orderId); var selectedOrderProduct = orderedProducts.FirstOrDefault(op => op.ProductId == productId); if (selectedOrderProduct is null) { var orderedProduct = new OrderedProductDataEntity { OrderId = orderId, ProductId = productId, Quantity = quantity }; await _orderRepository.AddProductToOrder(orderedProduct); } else { selectedOrderProduct.Quantity = quantity; await _orderRepository.UpdateExistingOrderedProduct(selectedOrderProduct); } }