Ejemplo n.º 1
0
        public async Task <OrderCreationResult> CreateOrderAsync(Customer customer,
                                                                 int numberOfOrderedCups)
        {
            if (customer == null)
            {
                throw new ArgumentNullException(nameof(customer),
                                                $"{nameof(customer)} must not be null");
            }

            if (numberOfOrderedCups < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(numberOfOrderedCups),
                                                      $"{nameof(numberOfOrderedCups)} must be greater than zero!");
            }

            OrderCreationResult result;

            var numberOfCupsInStock = await _coffeeCupRepository.GetCoffeeCupsInStockCountAsync();

            var areEnoughCupsInStock = numberOfOrderedCups <= numberOfCupsInStock;

            if (areEnoughCupsInStock)
            {
                Order createdOrder = await CreateOrderInternalAsync(customer, numberOfOrderedCups);

                result = new OrderCreationResult
                {
                    ResultCode           = OrderCreationResultCode.Success,
                    CreatedOrder         = createdOrder,
                    RemainingCupsInStock = numberOfCupsInStock - numberOfOrderedCups
                };
            }
            else
            {
                result = new OrderCreationResult
                {
                    ResultCode           = OrderCreationResultCode.StockExceeded,
                    RemainingCupsInStock = numberOfCupsInStock,
                };
            }

            return(result);
        }
        public async Task <OrderCreationResult> CreateOrderAsync(Customer customer,
                                                                 int numberOfOrderedCups)
        {
            // TODO: Throw ArgumentOutOfRangeException if number of ordered cups is less than 1

            OrderCreationResult result;

            // TODO: Return StockExceeded result code if not enough cups in stock

            Order createdOrder = await CreateOrderInternalAsync(customer, numberOfOrderedCups);

            result = new OrderCreationResult
            {
                ResultCode           = OrderCreationResultCode.Success,
                CreatedOrder         = null, // TODO: Store created order in CreatedOrder property
                RemainingCupsInStock = 0     // TODO: Store remaining cups in stock in OrderCreationResult
            };

            return(result);
        }