예제 #1
0
        public async Task <IActionResult> Create([FromBody] CreateRecipeRequest recipeRequest)
        {
            if (recipeRequest.Name == null || recipeRequest.Description == null)
            {
                return(BadRequest(new { error = "Null variables [Name and Description] are not allowed" }));
            }

            var recipe = new Recipe
            {
                Id          = new int(),
                Name        = recipeRequest.Name,
                Description = recipeRequest.Description,
                Date        = DateTime.UtcNow,
                ParentId    = recipeRequest.ParentId,
                Left        = 1,
                Right       = 2,
                DepthLevel  = 0,
                TreeId      = Guid.NewGuid()
            };

            if (recipe.ParentId != null)
            {
                var parentRecipe = await _recipeService.GetRecipeByIdAsync((int)recipe.ParentId);

                recipe.DepthLevel = parentRecipe.DepthLevel + 1;
                recipe.TreeId     = parentRecipe.TreeId;
                recipe.Left       = await _recipeService.FindLeftAtSpecificDeep(recipe.DepthLevel, recipe.TreeId, (int)recipe.ParentId);

                recipe.Right = recipe.Left + 1;
                await _recipeService.IncrementAllPositionsWhenRecipeAdded(recipe.Right, recipe.TreeId, (int)recipe.ParentId);
            }
            await _recipeService.CreateRecipeAsync(recipe);

            var response = new RecipeResponse
            {
                Id          = recipe.Id,
                Name        = recipe.Name,
                Description = recipe.Description,
                Date        = recipe.Date,
                ParentId    = recipe.ParentId,
                DepthLevel  = recipe.DepthLevel,
                TreeId      = recipe.TreeId
            };

            return(Ok(response));
        }