示例#1
0
        //Tested
        public async Task <string> Update(CocktailDto cocktailDto)
        {
            cocktailDto.ValidateIfNull("Model is invalid!");
            var cocktailToEdit = await GetCocktail(cocktailDto.Id);

            var cocktail = cocktailDto.MapToEditModel();

            var uniqueFileNamePath = _fileUploadService.SetUniqueImagePathForCocktail(cocktailDto.CocktailImage);

            cocktail.Image  = uniqueFileNamePath;
            cocktail.Rating = cocktailToEdit.Rating;
            var newCocktailComponents = new List <CocktailComponent>();

            foreach (var component in cocktail.CocktailComponents)
            {
                var ingridientId = await _ingredientServices
                                   .GetIngredientIdByNameAsync(component.Name);

                if (ingridientId == null)
                {
                    var newIngr = new Ingredient()
                    {
                        Name = component.Name
                    };
                    _context.Add(newIngr);
                    await _context.SaveChangesAsync();

                    ingridientId = newIngr.Id;
                }
                newCocktailComponents.Add(
                    new CocktailComponent
                {
                    CocktailId   = cocktailDto.Id,
                    IngredientId = ingridientId
                });
            }
            cocktail.CocktailComponents = newCocktailComponents;
            cocktail.Recepie            = await _recipeServices.ExtractRecipe(cocktail);

            _context.Entry(cocktailToEdit).CurrentValues.SetValues(cocktail);
            _context.RemoveRange(cocktailToEdit.CocktailComponents);
            _context.AddRange(cocktail.CocktailComponents);
            await _context.SaveChangesAsync();

            cocktail.Recepie = await _recipeServices.ExtractRecipe(cocktailToEdit);

            await _context.SaveChangesAsync();

            return(cocktailToEdit.Name);
        }