Example #1
0
        protected override async Task Handle(UpdateRecipeRequest request, CancellationToken cancellationToken)
        {
            var recipeToUpdate  = request.Recipe.Name;
            var recipeVariation = _mapper.Map <RecipeVariation>(request.Recipe);

            var existedRecipe = await _context.Recipes
                                .Include(r => r.Variations)
                                .FirstOrDefaultAsync(r => r.Name.Equals(recipeToUpdate))
                                .ConfigureAwait(false);

            if (existedRecipe == null)
            {
                throw new InvalidOperationException($"Recipe \"{recipeToUpdate}\" doesn't exist.");
            }

            var existedVariation = existedRecipe.Variations
                                   .FirstOrDefault(rv => rv.CreatedBy == recipeVariation.CreatedBy);

            if (existedVariation == null)
            {
                throw new InvalidOperationException($"There is not recipe \"{recipeToUpdate}\" by current user. Please use Create method");
            }

            // TODO: update properties and merge ingredients

            await _context.SaveChangesAsync().ConfigureAwait(false);
        }
        protected override async Task Handle(CreateRecipeRequest request, CancellationToken cancellationToken)
        {
            var recipeToCreate  = _mapper.Map <Recipe>(request.Recipe);
            var recipeVariation = _mapper.Map <RecipeVariation>(request.Recipe);

            var existedRecipe = await _context.Recipes
                                .Include(r => r.Variations)
                                .FirstOrDefaultAsync(r => r.Name.Equals(recipeToCreate.Name))
                                .ConfigureAwait(false);

            if (existedRecipe == null)
            {
                foreach (var ingredient in recipeVariation.Ingredients)
                {
                    ingredient.RecipeVariation = recipeVariation;
                }

                var recipe = new Recipe
                {
                    Name       = recipeToCreate.Name,
                    Variations = new List <RecipeVariation>
                    {
                        recipeVariation
                    }
                };

                recipeVariation.Recipe = recipe;

                _context.Recipes.Add(recipe);
            }
            else
            {
                // TODO: Throw error if such recipe variation already exists

                recipeVariation.RecipeId = existedRecipe.Id;
                existedRecipe.Variations.Add(recipeVariation);
            }

            await _context.SaveChangesAsync().ConfigureAwait(false);
        }