public async Task <IActionResult> EditRecipeAction(string id, string recipeActionId, string statusMessage, string recipeActionGroupId) { var recipe = await _recipeManager.GetRecipe(id, _userManager.GetUserId(User)); if (recipe == null) { return(GetNotFoundActionResult()); } RecipeAction recipeAction = null; if (!string.IsNullOrEmpty(recipeActionId)) { recipeAction = recipe.RecipeActions.SingleOrDefault(action => action.Id == recipeActionId); if (recipeAction == null) { return(GetNotFoundActionResult()); } } return(View(new EditRecipeActionViewModel() { RecipeId = id, ActionId = recipeAction?.ActionId, RecipeActionGroupId = recipeActionGroupId, RecipeAction = recipeAction, StatusMessage = statusMessage, Actions = new SelectList(_actionDescriptors, nameof(IActionDescriptor.ActionId), nameof(IActionDescriptor.Name), recipeAction?.ActionId) })); }
public IActionResult GetRecipe(int id) { var recipe = _recipeManager.GetRecipe(id); if (recipe != null) { return(Ok(recipe)); } return(NotFound()); }
public async Task <IActionResult> RemoveRecipe(string id) { var recipe = await _recipeManager.GetRecipe(id, _userManager.GetUserId(User)); if (recipe == null) { return(GetNotFoundActionResult()); } return(View(new RemoveRecipeViewModel() { Recipe = recipe })); }
public async Task <IActionResult> EditRecipeTrigger(string id, string recipeTriggerId, string statusMessage) { var recipe = await _recipeManager.GetRecipe(id, _userManager.GetUserId(User)); if (recipe == null) { return(GetNotFoundActionResult()); } return(View(new EditRecipeTriggerViewModel() { RecipeId = id, TriggerId = recipe.RecipeTrigger?.TriggerId, RecipeTrigger = recipe.RecipeTrigger, StatusMessage = statusMessage, Triggers = new SelectList(_triggerDescriptors, nameof(ITriggerDescriptor.TriggerId), nameof(ITriggerDescriptor.Name), recipe.RecipeTrigger?.TriggerId) })); }
private async Task <(IActionResult Error, RecipeAction Data)> GetRecipeAction(string identifier) { if (!_memoryCache.TryGetValue(identifier, out RecipeAction data)) { return(RedirectToAction("GetRecipes", "Recipes", new { statusMessage = "Error:Data could not be found or data session expired" }), null); } var recipe = await _recipeManager.GetRecipe(data.RecipeId, GetUserId()); if (recipe == null) { return(RedirectToAction("GetRecipes", "Recipes", new { statusMessage = "Error:Data could not be found or data session expired" }), null); } if (!string.IsNullOrEmpty(data.RecipeActionGroupId)) { var recipeActionGroup = recipe.RecipeActionGroups.Single(group => group.Id.Equals(data.RecipeActionGroupId, StringComparison.InvariantCultureIgnoreCase)); var actions = recipeActionGroup.RecipeActions.OrderBy(action => action.Order); var matched = actions.Select((action, i) => (action, i)) .Where(tuple => tuple.Item1.ActionId == data.Id); var index = matched.Any() ? actions.Select((action, i) => (action, i)) .Where(tuple => tuple.Item1.ActionId == data.Id) .Select(tuple => tuple.Item2) .FirstOrDefault() : -1; if (index == -1 && actions.Any()) { RecipeActionIdInGroupBeforeThisOne = actions.Last().Id; } else if (index > 0) { RecipeActionIdInGroupBeforeThisOne = actions.ElementAt(index - 1).Id; } } return(null, data); }
public async Task <ExternalServiceData> ExecuteWitchcraftToComputeExternalService() { var data = GetData(); var recipe = await _recipeManager.GetRecipe(data.RecipeId); if (recipe == null) { return(null); } var actionData = new Dictionary <string, (object data, string json)>(); if (!string.IsNullOrEmpty(data.RecipeActionId)) { var recipeAction = recipe.RecipeActions.SingleOrDefault(action => action.Id.Equals(data.RecipeActionId, StringComparison.InvariantCultureIgnoreCase)); if (recipeAction == null) { return(null); } var dispatchResult = await _actionDispatcher.Dispatch(actionData, recipeAction); actionData.Add("PreviousAction", (dispatchResult.First().Data, dispatchResult.First().DataJson)); actionData.Add("ActionData0", (dispatchResult.First().Data, dispatchResult.First().DataJson)); } if (!string.IsNullOrEmpty(data.RecipeActionGroupId)) { var recipeActionGroup = recipe.RecipeActionGroups.SingleOrDefault(action => action.Id.Equals(data.RecipeActionGroupId, StringComparison.InvariantCultureIgnoreCase)); if (recipeActionGroup == null) { return(null); } await _actionDispatcher.Dispatch(actionData, recipeActionGroup); } var value = InterpolationHelper.InterpolateString(data.Value, actionData.ToDictionary(pair => pair.Key, pair => pair.Value.data)); return(await _externalServiceManager.GetExternalServiceData(value, _data.UserId)); }
public JsonResult Edit(int?id) { var result = new RecipeEditViewModel(); if (id.HasValue) { result.Recipe = _recipeManager.GetRecipe(id.Value); } else { result.Recipe = new Recipe(); } result.Effects = _ingredientManager.GetAllEffects(); result.Moods = _ingredientManager.GetAllMoods(); result.Ingredients = _ingredientManager.GetAllIngredients(); return(Json(result, JsonRequestBehavior.AllowGet)); }
private async Task <(IActionResult Error, RecipeTrigger Data)> GetRecipeTrigger(string identifier) { if (!_memoryCache.TryGetValue(identifier, out RecipeTrigger data)) { return(RedirectToAction("GetRecipes", "Recipes", new { statusMessage = "Error:Data could not be found or data session expired" }), null); } var recipe = await _recipeManager.GetRecipe(data.RecipeId, _userManager.GetUserId(User)); if (recipe == null) { return(RedirectToAction("GetRecipes", "Recipes", new { statusMessage = "Error:Data could not be found or data session expired" }), null); } return(null, data); }
public async Task <IViewComponentResult> InvokeAsync(string recipeId) { var recipe = await _recipeManager.GetRecipe(recipeId); var properties = new Dictionary <string, object>(); if (recipe?.RecipeTrigger != null) { var descriptor = _triggerDescriptors.First(triggerDescriptor => triggerDescriptor.TriggerId == recipe?.RecipeTrigger.TriggerId); if (descriptor.GetType().IsSubclassOfRawGeneric(typeof(BaseTriggerHandler <,>))) { var type = descriptor.GetType().BaseType.GetGenericArguments().First(); properties = GetRecursiveAvailableProperties(type); } } return(View(new RecipeActionFooterViewModel() { Properties = properties, NoRecipeTrigger = recipe?.RecipeTrigger == null })); }
public async Task <IViewComponentResult> InvokeAsync(string recipeId, string recipeActionIdInGroupBeforeThisOne) { var recipe = await _recipeManager.GetRecipe(recipeId); var properties = new Dictionary <string, object>(); if (recipe?.RecipeTrigger != null) { var descriptor = _triggerDescriptors.FirstOrDefault(triggerDescriptor => triggerDescriptor.TriggerId == recipe?.RecipeTrigger.TriggerId); if (descriptor != null && descriptor.GetType().IsSubclassOfRawGeneric(typeof(BaseTriggerHandler <,>))) { var type = descriptor.GetType().BaseType.GetGenericArguments().First(); properties.Add("TriggerData", GetRecursiveAvailableProperties(type)); } } if (!string.IsNullOrEmpty(recipeActionIdInGroupBeforeThisOne)) { var previousAction = recipe.RecipeActions.FirstOrDefault(action => action.Id.Equals(recipeActionIdInGroupBeforeThisOne, StringComparison.InvariantCultureIgnoreCase)); if (previousAction != null) { var type = _actionDescriptors.FirstOrDefault(handler => handler.ActionId == previousAction.ActionId)?.ActionResultDataType; properties.Add("PreviousAction", GetRecursiveAvailableProperties(type)); var recipeActionGroupId = previousAction.RecipeActionGroupId; var recipeActionGroup = recipe.RecipeActionGroups.SingleOrDefault(group => group.Id.Equals(recipeActionGroupId, StringComparison.InvariantCultureIgnoreCase)); if (recipeActionGroup != null) { var actions = recipeActionGroup.RecipeActions.OrderBy(action => action.Order); for (var i = 0; i < actions.Count(); i++) { var currentAction = actions.ElementAt(i); if (currentAction.Id.Equals(recipeActionIdInGroupBeforeThisOne, StringComparison.InvariantCultureIgnoreCase)) { break; } type = _actionDescriptors.FirstOrDefault(handler => handler.ActionId == currentAction.ActionId)?.ActionResultDataType; properties.Add($"ActionData{i}", GetRecursiveAvailableProperties(type)); } } } } return(View(new RecipeActionFooterViewModel() { Properties = properties, NoRecipeTrigger = recipe?.RecipeTrigger == null })); }