コード例 #1
0
        private async Task <List <Ingredient> > GetExistingIngredientsAsync(InitialNewShoppingListIngredientsDto modelDto)
        {
            IEnumerable <string> insertedIngredientNames = modelDto.Ingredients.Select(x => x.Name.ToLower());

            return(await _context.Ingredient
                   .Where(x => insertedIngredientNames.Contains(x.Name.ToLower()))
                   .ToListAsync(modelDto.CancellationToken));
        }
コード例 #2
0
        public async Task <ICollection <ShoppingList> > InitialNewShoppingListIngredients(InitialNewShoppingListIngredientsDto modelDto)
        {
            List <ShoppingList> result = new List <ShoppingList>();

            List <Ingredient> existingIngredients = await GetExistingIngredientsAsync(modelDto);

            foreach (ShoppingListIngredientListItemDto newShoppingListIngredient in modelDto.Ingredients)
            {
                Ingredient insertedIngredient =
                    existingIngredients.FirstOrDefault(x => x.Name.ToLower() == newShoppingListIngredient.Name.ToLower());

                if (insertedIngredient == null)
                {
                    insertedIngredient = (await _context.Ingredient.AddAsync(new Ingredient
                    {
                        Name = newShoppingListIngredient.Name
                    }, modelDto.CancellationToken)).Entity;
                }

                result.Add(new ShoppingList
                {
                    Ingredient = insertedIngredient,
                    Amount     = newShoppingListIngredient.Amount
                });
            }

            return(result.GroupBy(x => x.Ingredient)
                   .Select(x => new ShoppingList
            {
                Ingredient = x.Key,
                Amount = x.Select(y => y.Amount).ToArray().Sum(),
            }).ToList());
        }