//This is called when users put in their search criteria via the home page. This calls out to the recipeClient, which makes the API //calls to return back the list of recipes public async Task <IActionResult> SearchRecipe(string diet, Intolerances intolerances, int?maxCalorie, int?maxCarb, int?maxProtein, int?minProtein) { var recipes = await _recipeClient.SearchForRecipeByQuery(diet, intolerances, maxCalorie, maxCarb, maxProtein, minProtein); var recipeSearchResults = new List <RecipeSearchResult>(); foreach (var recipe in recipes) { var recipeResult = new RecipeSearchResult() { Id = recipe.Id, Title = recipe.Title, Image = recipe.Image, }; recipeSearchResults.Add(recipeResult); } return(View(recipeSearchResults)); }
//&intolerances=egg&diet=vegetarian&maxCarbs=400&maxProtein=15&minProtein=1 //Called to list out recipes based on the user search criteria public virtual async Task <List <Recipe> > SearchForRecipeByQuery(string diet, Intolerances intolerance, int?maxCalorie, int?maxCarb, int?maxProtein, int?minProtein) { StringBuilder query = new StringBuilder(); if (diet != null) { query.Append($"&diet={diet}"); } if (intolerance != null) { query.Append($"&intolerances={intolerance.ToString()}"); } if (maxCalorie.HasValue) { query.Append($"&maxCalories={maxCalorie}"); } if (maxCarb.HasValue) { query.Append($"&maxCarbs={maxCarb}"); } if (maxProtein.HasValue) { query.Append($"&maxProtein={maxProtein}"); } if (minProtein.HasValue) { query.Append($"&minProtein={minProtein}"); } var response = await _httpClient.GetAsync($"/recipes/complexSearch?apiKey={_config.ApiKey}{query}&number=25"); var recipe = JsonConvert.DeserializeObject <ReciepeApiResults>(await response.Content.ReadAsStringAsync()); return(recipe.Results); }
//Return home page public async Task <IActionResult> Index() { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var hasUserPreferences = await _preferencesClient.SavedUserPreferences(userId); var intolerances = new Intolerances(); if (User.Identity.IsAuthenticated && hasUserPreferences) { var userPreferences = await _preferencesClient.RetrieveUserPreferences(userId); var intolerenceList = userPreferences.Intolerances.Split(',').ToList(); if (intolerenceList.Contains("egg")) { intolerances.egg = true; } if (intolerenceList.Contains("dairy")) { intolerances.dairy = true; } if (intolerenceList.Contains("gluton")) { intolerances.gluton = true; } if (intolerenceList.Contains("grain")) { intolerances.grain = true; } if (intolerenceList.Contains("peanut")) { intolerances.peanut = true; } if (intolerenceList.Contains("sesame")) { intolerances.sesame = true; } if (intolerenceList.Contains("seafood")) { intolerances.seafood = true; } if (intolerenceList.Contains("shellfish")) { intolerances.shellfish = true; } if (intolerenceList.Contains("soy")) { intolerances.sulfite = true; } if (intolerenceList.Contains("sulfite")) { intolerances.sulfite = true; } if (intolerenceList.Contains("treeNut")) { intolerances.treeNut = true; } if (intolerenceList.Contains("wheat")) { intolerances.wheat = true; } var recipeList = await _recipeClient.SearchForRecipeByQuery(userPreferences.Diet, intolerances, userPreferences.MaxCalorie, userPreferences.MaxCarb, userPreferences.MaxProtein, userPreferences.MinProtein); Random random = new Random(); if (recipeList == null) { TempData["Error"] = "You have used up all the api calls. Please swap out the API key"; return(RedirectToAction("Error", "Home")); } else if (recipeList.Count == 0) { ViewBag.RecipeName = "No found recipes based on your preferences"; return(View()); } else { var randomRecipeNumber = random.Next(recipeList.Count); var randomRecipe = recipeList.ElementAt(randomRecipeNumber); ViewBag.RecipeName = randomRecipe.Title; ViewBag.ImageURL = randomRecipe.Image; ViewBag.Id = randomRecipe.Id; ViewBag.Summary = randomRecipe.Summary; return(View()); } } else { var recipeList = await _recipeClient.SearchForAllRecipes(); Random random = new Random(); if (recipeList == null) { ViewBag.Error = "You have used up all the api calls. Please swap out the API key"; return(RedirectToAction("Error", "Home")); } else { var randomRecipeNumber = random.Next(recipeList.Count); var randomRecipe = recipeList.ElementAt(randomRecipeNumber); ViewBag.RecipeName = randomRecipe.Title; ViewBag.ImageURL = randomRecipe.Image; ViewBag.Id = randomRecipe.Id; ViewBag.Summary = randomRecipe.Summary; return(View()); } } }
public async Task <IActionResult> EditPreferences() { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var retrieveUserPreferences = await _preferencesClient.RetrieveUserPreferences(userId); List <string> intolerenceList = retrieveUserPreferences.Intolerances.Split(',').ToList(); var intolerances = new Intolerances(); if (intolerenceList.Contains("egg")) { intolerances.egg = true; } if (intolerenceList.Contains("dairy")) { intolerances.dairy = true; } if (intolerenceList.Contains("gluton")) { intolerances.gluton = true; } if (intolerenceList.Contains("grain")) { intolerances.grain = true; } if (intolerenceList.Contains("peanut")) { intolerances.peanut = true; } if (intolerenceList.Contains("sesame")) { intolerances.sesame = true; } if (intolerenceList.Contains("seafood")) { intolerances.seafood = true; } if (intolerenceList.Contains("shellfish")) { intolerances.shellfish = true; } if (intolerenceList.Contains("soy")) { intolerances.sulfite = true; } if (intolerenceList.Contains("sulfite")) { intolerances.sulfite = true; } if (intolerenceList.Contains("treeNut")) { intolerances.treeNut = true; } if (intolerenceList.Contains("wheat")) { intolerances.wheat = true; } var retrieveUserPreferencesModel = new UserPreferencesViewModel() { Id = retrieveUserPreferences.Id, UserID = userId, Diet = retrieveUserPreferences.Diet, Intolerances = intolerances, MaxCalorie = retrieveUserPreferences.MaxCalorie, MaxCarb = retrieveUserPreferences.MaxCarb, MaxProtein = retrieveUserPreferences.MaxProtein, MinProtein = retrieveUserPreferences.MinProtein, }; return(View(retrieveUserPreferencesModel)); }
//Saves user preferences to database public async Task <UserPreference> SaveUserPreferences(int id, string userId, string diet, Intolerances intolerances, int?maxCalorie, int?maxCarb, int?maxProtein, int?minProtein) { var savedUserPreferences = new UserPreference() { Id = id, UserId = userId, Diet = diet, Intolerances = intolerances.ToString(), MaxCalorie = maxCalorie, MaxCarb = maxCarb, MaxProtein = maxProtein, MinProtein = minProtein, }; try { _context.UserPreferences.Add(savedUserPreferences); await _context.SaveChangesAsync(); } catch (Exception ex) { Console.WriteLine(ex); } return(savedUserPreferences); }