public async Task <FeedbackModel> GetFeedbackUser(User user) { var totalBadges = await _context.Badges.CountAsync(); var totalChallenges = await _context.UserChallenges.CountAsync(x => x.User.Id == user.Id); var userChallengesCompleted = await _context.UserChallenges .Include(x => x.User) .Include(x => x.Challenge) .Where(x => x.Completed && x.User.Id == user.Id) .Select(x => SimpleUserChallengeModel.ConvertToSimpleUserChallengeModel(x)) .ToListAsync(); var userBadges = await _context.UserBadges .Include(x => x.User) .Include(x => x.Badge) .Where(x => x.User.Id == user.Id) .Select(x => x.Badge) .ToListAsync(); return(new FeedbackModel { Badges = userBadges, CompletedChallenges = userChallengesCompleted, TotalBadges = totalBadges, TotalChallenges = totalChallenges }); }
public async Task<ChallengeModel> GetChallengeProfile(User user) { var countChallenges = await _context.UserChallenges .Include(x => x.User) .Include(x => x.Challenge) .CountAsync(x => x.DayChallenge.Date == DateTime.Now.Date && user.Id == x.User.Id); if (countChallenges == 0) { var challenge = await GetNextChallenge(); await _context.UserChallenges.AddAsync(new UserChallenge { User = user, Challenge = challenge, DayChallenge = DateTime.Now }); await _context.SaveChangesAsync(); } var challengesOfDay = await _context.UserChallenges .Include(x => x.User) .Include(x => x.Challenge) .Where(x => x.DayChallenge.Date == DateTime.Now.Date && user.Id == x.User.Id) .ToListAsync(); return new ChallengeModel { Challenge = SimpleUserChallengeModel.ConvertToSimpleUserChallengeModel(challengesOfDay.LastOrDefault()), ChallengesForDay = challengesOfDay.Select(x => SimpleUserChallengeModel.ConvertToSimpleUserChallengeModel(x)).ToList(), ChallengesRemaining = CHALLENGES_FOR_DAY - challengesOfDay.Count }; }