コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }