Beispiel #1
0
        private TrackedPeriod CalculateTotals(TrackedPeriod tp, List <Day> days)
        {
            decimal totalCalories   = 0;
            decimal totalProtein    = 0;
            decimal totalCarbs      = 0;
            decimal totalFat        = 0;
            decimal totalFiber      = 0;
            decimal totalSugar      = 0;
            decimal totalFoodWeight = 0;

            List <decimal> calorieCountForDays = new List <decimal>();

            days.ForEach(d =>
            {
                decimal totalCaloriesForDay = 0;
                d.Meals.ToList().ForEach(m =>
                {
                    m.MealFoods.ToList().ForEach(mf =>
                    {
                        totalCaloriesForDay += mf.Food.Energy * (mf.FoodAmount / 100);
                        totalFoodWeight     += mf.FoodAmount;
                        totalCalories       += mf.Food.Energy * (mf.FoodAmount / 100);
                        totalProtein        += mf.Food.Protein * (mf.FoodAmount / 100);
                        totalCarbs          += mf.Food.Carbs * (mf.FoodAmount / 100);
                        totalFat            += mf.Food.Fat * (mf.FoodAmount / 100);
                        totalFiber          += mf.Food.Fiber * (mf.FoodAmount / 100);
                        totalSugar          += mf.Food.Sugar * (mf.FoodAmount / 100);
                    });
                });
                calorieCountForDays.Add(totalCaloriesForDay);
            });

            tp.AverageCaloriesPerDay = totalCalories / days.Count;
            tp.SmallestCalorieCount  = calorieCountForDays.Min();
            tp.BiggestCalorieCount   = calorieCountForDays.Max();
            tp.TotalCalories         = totalCalories;
            tp.TotalProtein          = totalProtein;
            tp.TotalCarbs            = totalCarbs;
            tp.TotalFat        = totalFat;
            tp.TotalFiber      = totalFiber;
            tp.TotalSugar      = totalSugar;
            tp.TotalFoodWeight = totalFoodWeight;

            return(tp);
        }
Beispiel #2
0
        public async Task <ResultDto> AddNewTrackedPeriod(NewTrackedPeriodDto newTrackedPeriodDto, string userId)
        {
            var days = new List <Day>();

            newTrackedPeriodDto.DayIds.ForEach(d => days.Add(
                                                   _context.Days.Where(day => day.UUID == d && day.User.UUID == userId)
                                                   .Include(day => day.Meals)
                                                   .ThenInclude(m => m.MealFoods)
                                                   .ThenInclude(mf => mf.Food)
                                                   .FirstOrDefault()
                                                   )
                                               );

            if (days == null || days.Count == 0)
            {
                return(new ResultDto(false, "No days found with given information"));
            }

            var tp = new TrackedPeriod
            {
                UUID      = Guid.NewGuid().ToString(),
                Name      = newTrackedPeriodDto.Name,
                CreatedAt = DateTime.Now,
                UpdatedAt = DateTime.Now,
                User      = await _context.Users.Where(u => u.UUID == userId).FirstOrDefaultAsync(),
            };

            tp = CalculateTotals(tp, days);

            _context.Add(tp);

            days.ForEach(d =>
            {
                var tpd = new TrackedPeriodDay
                {
                    Day           = d,
                    TrackedPeriod = tp
                };
                _context.Add(tpd);
            });

            await _context.SaveChangesAsync();

            return(new ResultDto(true, "New period saved succesfully"));
        }
        /// <inheritdoc />
        async Task ITrackedPeriodService.UpsertAsync(TrackedPeriod trackedPeriod)
        {
            await sqliteTrackedPeriodService.UpsertAsync(trackedPeriod);

            await webApiTrackedPeriodService.UpsertAsync(trackedPeriod);
        }
Beispiel #4
0
 /// <inheritdoc />
 async Task ITrackedPeriodService.UpsertAsync(TrackedPeriod trackedPeriod)
 {
     var dbConnection = await Connection.Value;
     await dbConnection.InsertOrReplaceAsync(trackedPeriod);
 }
Beispiel #5
0
        public async Task <ActionResult <TrackedPeriodDto> > GetLastSevenDayTotals(string userId, bool includeCreatedAt)
        {
            List <Day> days = new List <Day>();

            if (includeCreatedAt)
            {
                days = await _context.Days.Where(
                    d => d.User.UUID == userId &&
                    (
                        (d.CreatedAt >= DateTime.Now.AddDays(-7) && d.CreatedAt <= DateTime.Now)
                        ||
                        (d.Date >= DateTime.Now.AddDays(-7) && d.Date <= DateTime.Now)
                    )
                    )
                       .Include(d => d.User)
                       .Include(d => d.Meals)
                       .ThenInclude(m => m.MealFoods)
                       .ThenInclude(mf => mf.Food)
                       .ThenInclude(f => f.User)
                       .ToListAsync();
            }
            else
            {
                days = await _context.Days.Where(
                    d => d.User.UUID == userId &&
                    (d.Date >= DateTime.Now.AddDays(-7) && d.Date <= DateTime.Now)
                    )
                       .Include(d => d.User)
                       .Include(d => d.Meals)
                       .ThenInclude(m => m.MealFoods)
                       .ThenInclude(mf => mf.Food)
                       .ThenInclude(f => f.User)
                       .ToListAsync();
            }

            if (days.Count > 0)
            {
                var tp = new TrackedPeriod
                {
                    UUID      = Guid.NewGuid().ToString(),
                    Name      = "Last 7 days",
                    CreatedAt = DateTime.Now,
                    UpdatedAt = DateTime.Now,
                    User      = await _context.Users.Where(u => u.UUID == userId).FirstOrDefaultAsync(),
                };

                tp = CalculateTotals(tp, days);

                var tpDto   = _mapper.Map <TrackedPeriodDto>(tp);
                var dayDtos = new List <DayDto>();

                days.ForEach(day =>
                {
                    var dayDto = _mapper.Map <DayDto>(day);
                    dayDtos.Add(dayDto);
                });

                tpDto.Days = dayDtos;
                return(tpDto);
            }

            return(new TrackedPeriodDto());
        }