public static UpdateCocktailViewModel MapToViewUpdateModel(this Cocktail cocktail, IReadOnlyCollection <Bar> allBars)
        {
            var vm = new UpdateCocktailViewModel();

            vm.Id                 = cocktail.Id;
            vm.Name               = cocktail.Name;
            vm.IsHidden           = cocktail.IsHidden;
            vm.Picture            = cocktail.Picture;
            vm.Quantities         = cocktail.Ingredients.Select(i => i.Quantity).ToList();
            vm.CurrentIngredients = cocktail.Ingredients.Select(c => c.Ingredient.MapToViewModel()).ToList();
            vm.AllBars            = allBars.Select(b => b.Name).ToList();
            if (cocktail.Bars.Count != 0)
            {
                vm.OfferingBars = cocktail.Bars.Select(c => c.Bar.Name).ToList();
            }

            return(vm);
        }
        public static async Task <Cocktail> MapToEntity(this UpdateCocktailViewModel vm)
        {
            if (vm.NewPicture != null)
            {
                using (var stream = new MemoryStream())
                {
                    await vm.NewPicture.CopyToAsync(stream);

                    vm.Picture = stream.ToArray();
                }
            }
            var cocktail = new Cocktail
            {
                Id       = vm.Id,
                Name     = vm.Name,
                IsHidden = vm.IsHidden,
                Picture  = vm.Picture
            };

            return(cocktail);
        }
Пример #3
0
        public async Task <IActionResult> UpdateCocktail(UpdateCocktailViewModel vm)
        {
            var cocktail = await vm.MapToEntity();

            await _cocktailServices.UpdateCocktailAsync(cocktail);

            var currentIngredients = vm.CurrentIngredients.Select(c => c.MapToEntity()).ToList();

            for (int i = 0; i < currentIngredients.Count; i++)
            {
                if (await _cocktailIngredientsServices.IsPairUpdatedAsync(currentIngredients[i], cocktail, vm.Quantities[i]))
                {
                    if (vm.Quantities[i] == 0)
                    {
                        continue;
                    }

                    await _cocktailIngredientsServices.UpdateAsync(currentIngredients[i], cocktail, vm.Quantities[i]);
                }
            }

            var newIngredients = await _ingredientServices.GetMultipleIngredientsByNameAsync(vm.Ingredients);

            for (int i = 0; i < newIngredients.Count; i++)
            {
                if (!await _cocktailIngredientsServices.PairExistsAsync(newIngredients[i], cocktail))
                {
                    if (vm.Quantities[i] == 0)
                    {
                        continue;
                    }

                    await _cocktailIngredientsServices.AddAsync(cocktail, newIngredients[i], vm.Quantities[i]);
                }
            }

            return(View("ManageCocktails"));
        }