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); }
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); }
/// <inheritdoc /> async Task ITrackedPeriodService.UpsertAsync(TrackedPeriod trackedPeriod) { var dbConnection = await Connection.Value; await dbConnection.InsertOrReplaceAsync(trackedPeriod); }
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()); }