//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));
        }
示例#2
0
        //&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());
                }
            }
        }
示例#4
0
        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));
        }
示例#5
0
        //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);
        }