Beispiel #1
0
        public async Task <IActionResult> DeleteConfirmed(int id)
        {
            UserStatsHandler ush = new UserStatsHandler(_userManager, _context);

            var meal = await _context.Meal
                       .FirstOrDefaultAsync(m => m.Id == id);

            var date = meal.MealDate;

            var userId = await _context.Users
                         .Where(u => u.Id == meal.UserId)
                         .Select(u => u.Id)
                         .FirstOrDefaultAsync();

            _context.Meal.Remove(meal);
            await _context.SaveChangesAsync();

            ush.UpdateDailyCalories(userId, date);

            if (User.IsInRole("Admin"))
            {
                return(RedirectToAction("ManageMeals", "Admin"));
            }

            return(RedirectToAction(nameof(Index)));
        }
Beispiel #2
0
        public IActionResult Index()
        {
            ViewBag.Title = "MacroNewt Home";

            UserStatsHandler ush = new UserStatsHandler(_userManager, _context);

            string userID = User.FindFirstValue(ClaimTypes.NameIdentifier);

            UserConfirmedStatusViewModel ucs = new UserConfirmedStatusViewModel
            {
                UserEmailConfirmed = _context.Users
                                     .Where(u => u.Id == userID)
                                     .Select(u => u.EmailConfirmed)
                                     .FirstOrDefault()
            };

            if (User.IsInRole("Admin"))
            {
                return(RedirectToAction("Index", "Admin"));
            }

            if (!User.IsInRole("Admin"))
            {
                ush.UpdateDailyCalories(User.FindFirstValue(ClaimTypes.NameIdentifier), DateTime.Today);
            }

            return(View(ucs));
        }
Beispiel #3
0
        /// <summary>
        /// Retrieves and displays daily stats for a specific past date in a view component
        /// </summary>
        /// <param name="targetDate"></param>
        /// <returns>The PastDayCalStats ViewComponent</returns>
        public IActionResult GetSpecificDayCalStats(string targetDate)
        {
            UserStatsHandler ush = new UserStatsHandler(_userManager, _context);

            MacroNewtUser user = _userManager.GetUserAsync(HttpContext.User).Result;

            return(ViewComponent("PastDayCalStats", ush.GetPastMacroTargets(user, targetDate)));
        }
Beispiel #4
0
        /// <summary>
        /// Retrieves and displays user's current daily stats in a view component
        /// </summary>
        /// <returns>The CurrentDayCalStats ViewComponent</returns>
        public IActionResult GetCurrentDayCalStats()
        {
            UserStatsHandler ush = new UserStatsHandler(_userManager, _context);

            MacroNewtUser user = _userManager.GetUserAsync(HttpContext.User).Result;

            return(ViewComponent("CurrentDayCalStats", ush.GetCurrentMacroTargets(user)));
        }
Beispiel #5
0
        /// <summary>
        /// Checks ModelState and returns same view if invalid, otherwise provides user with view component for confirming meal to be logged
        /// </summary>
        /// <param name="form">A <see cref="FoodViewModel"/> object populated with meal data to be shown before confirming the meal</param>
        /// <returns>The ConfirmMeal ViewComponent</returns>
        public IActionResult ConfirmMeal([Bind("CalorieTotal,ProteinTotal,FatTotal,CarbTotal,Title,MealDate,MealType,Foods,MealId,UserId,UserEmail,ReLogged")] FoodViewModel form)
        {
            if (!ModelState.IsValid)
            {
                Response.Headers.Add("vstatus", "fail");

                return(ViewComponent("MealDetail", form));
            }
            else
            {
                UserStatsHandler ush = new UserStatsHandler(_userManager, _context);

                MacroNewtUser user;

                if (form.UserId == null)
                {
                    user = _userManager.GetUserAsync(HttpContext.User).Result;
                }
                else
                {
                    user = _context.Users.FirstOrDefault(u => u.Id == form.UserId);
                }


                Response.Headers.Add("vstatus", "pass");

                Boolean admin = false;

                if (User.IsInRole("Admin"))
                {
                    admin = true;
                }

                return(ViewComponent("ConfirmMeal", ush.GetMacroTargets(user, admin, form.MealId, form.MealDate, form.CalorieTotal, form.ProteinTotal, form.FatTotal, form.CarbTotal)));
            }
        }
Beispiel #6
0
        /// <summary>
        /// Creates or edits a meal in the database according to the provided foods and meal details
        /// </summary>
        /// <remarks>
        /// Also updates user's daily stats with use of <see cref="UserStatsHandler"/> class.
        /// </remarks>
        /// <param name="form">A <see cref="FoodViewModel"/> object populated with meal data to be logged</param>
        /// <returns>A Json object representing successful meal logging</returns>
        public IActionResult LogMeal([Bind("CalorieTotal,ProteinTotal,FatTotal,CarbTotal,Title,MealDate,MealType,Foods,MealId,UserId")] FoodViewModel form)
        {
            string UserId;

            if (form.MealId == 0)
            {
                UserId = User.FindFirstValue(ClaimTypes.NameIdentifier);
            }
            else
            {
                UserId = form.UserId;
            }

            if (form.Title == "Auto")
            {
                var currentMealCount = _context.Meal
                                       .Where(x => (x.MealDate.Date == form.MealDate.Date) && (x.UserId == UserId)).Count() + 1;

                form.Title = form.MealDate.ToString("MM/dd/yyyy") + " - Meal #" + currentMealCount.ToString();
            }

            UserStatsHandler ush = new UserStatsHandler(_userManager, _context);

            var UserEmail = _context.Users.FirstOrDefault(u => u.Id == UserId).Email;

            List <string> foodNdbnos = new List <string>();

            foreach (var f in form.Foods)
            {
                foodNdbnos.Add(f.Ndbno);
            }

            FoodViewModel fvm = AddNutrientData(foodNdbnos);

            for (int i = 0; i < form.Foods.Count; i++)
            {
                fvm.Foods[i].NumberOfServings = form.Foods[i].NumberOfServings;
                fvm.Foods[i].PortionIndex     = form.Foods[i].PortionIndex;
                fvm.Foods[i].Value            = form.Foods[i].Value;
                if (form.Foods[i].Nutrients[0].Measures.Count == 0)
                {
                    fvm.Foods[i].SelectedPortionLabel = "100g";
                    fvm.Foods[i].SelectedPortionQty   = "1";
                }
                else
                {
                    fvm.Foods[i].SelectedPortionLabel = form.Foods[i].Nutrients[0].Measures[form.Foods[i].PortionIndex - 1].Label;
                    fvm.Foods[i].SelectedPortionQty   = form.Foods[i].Nutrients[0].Measures[form.Foods[i].PortionIndex - 1].Qty;
                }
            }


            if (form.MealId == 0)
            {
                Meal m = new Meal()
                {
                    Calories        = form.CalorieTotal,
                    MealDate        = form.MealDate,
                    MealType        = form.MealType,
                    Title           = form.Title,
                    FoodComponents  = fvm.Foods,
                    UserId          = UserId,
                    UserEmail       = UserEmail,
                    ProteinCalories = (form.ProteinTotal * 4),
                    FatCalories     = (form.FatTotal * 9),
                    CarbCalories    = (form.CarbTotal * 4)
                };
                _context.Meal.Add(m);

                _context.SaveChanges();

                ush.UpdateDailyCalories(UserId, m.MealDate);

                return(Json(new { success = true, mealID = m.Id }));
            }
            else
            {
                Meal m = new Meal()
                {
                    Calories        = form.CalorieTotal,
                    MealDate        = form.MealDate,
                    MealType        = form.MealType,
                    Title           = form.Title,
                    FoodComponents  = fvm.Foods,
                    UserId          = UserId,
                    UserEmail       = UserEmail,
                    ProteinCalories = (form.ProteinTotal * 4),
                    FatCalories     = (form.FatTotal * 9),
                    CarbCalories    = (form.CarbTotal * 4)
                };

                var mealToRemove = _context.Meal
                                   .Where(x => x.Id == form.MealId)
                                   .FirstOrDefault();

                _context.Meal.Remove(mealToRemove);

                _context.SaveChanges();

                _context.Meal.Add(m);

                _context.SaveChanges();

                ush.UpdateDailyCalories(UserId, m.MealDate);


                return(Json(new { success = true, mealID = m.Id }));
            }
        }