public async Task <Basket> CreateBasket(CreateBasketCommand command, CancellationToken cancellationToken = default) { command.Validate(); var productsInStock = new List <Product>(); async void action(Product product) { var inStock = await _productProviderService.ValidateProductStock(product.EAN); if (inStock) { productsInStock.Add(product); } } command.Products .ToList() .ForEach(action); if (!productsInStock.Any()) { throw new InvalidOperationException("none of the products have stock."); } var basket = await Task.FromResult(new Basket(command.User, productsInStock)); return(basket); }
public BasketController(CreateBasketCommand createBasketCommand, BasketQuery basketQuery, DeleteBasketCommand deleteBasketCommand, AddItemToBasketCommand addItemToBasketCommand, UpdateItemQuantityCommand updateItemQuantityCommand) { _createBasketCommand = createBasketCommand; _basketQuery = basketQuery; _deleteBasketCommand = deleteBasketCommand; _addItemToBasketCommand = addItemToBasketCommand; _updateItemQuantityCommand = updateItemQuantityCommand; }
public async Task CreateBasket(CreateBasketDTO dto, CancellationToken cancellationToken = default) { var user = new User(dto.ContractNumber, dto.CardNumber); var products = new List <Product>(); // assemble DTO in Domain dto.Products .ToList() .ForEach(product => products.Add(product.Assemble())); // create new basket with CreateBasketCommand var createCommand = new CreateBasketCommand(user, products); var basket = await _basketService.CreateBasket(createCommand, cancellationToken); // save the basket into the cache _cacheService.SetValue($"basket_{user.ContractNumber}_{user.CardNumber}", basket, TimeSpan.FromDays(1)); }
private void CreateBasket() { CreateBasketCommand command = new CreateBasketCommand(_basketRepository); _commandResult = command.Do(_consumerId); }