Exemplo n.º 1
0
        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
            });
        }
Exemplo n.º 2
0
        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
            };

        }