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