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); }