コード例 #1
0
        public async Task <ActionResult> Index()
        {
            var currentUserId = User.Identity.GetUserId();

            TriviaDashboardViewModel viewModel = new TriviaDashboardViewModel();

            viewModel.NewQuizzes = await TriviaService.GetNewQuizzesAsync();

            viewModel.DailyQuizzes = await TriviaService.GetDailyQuizzesAsync(5);

            viewModel.TrendingQuizzes = await GetTrendingQuizzesAsync();

            viewModel.PopularQuizzes = await GetPopularQuizzesAsync();

            // unauthenticated users don't have any quizzes to track
            if (User.Identity.IsAuthenticated)
            {
                viewModel.UnfinishedQuizzes = await TriviaService.GetUnfinishedQuizzesAsync(User.Identity.GetUserId());
            }

            // alters the viewmodel's list of quizzes to indicate if the quiz has already been completed by the currently logged in user
            await SetQuizzesCompletedByCurrentUser(currentUserId, viewModel);

            viewModel.RecentlyCompletedQuizzes = await TriviaService.GetUsersCompletedQuizzesAsync(currentUserId);

            viewModel.QuizCategories = await TriviaService.GetQuizCategoriesAsync();

            await SetNotificationsAsync();

            return(View(viewModel));
        }
コード例 #2
0
        /// <summary>
        /// Alters the viewmodel's list of quizzes to indicate if the quiz has already been completed by the currently logged in user
        /// </summary>
        /// <param name="currentUserId"></param>
        /// <param name="viewModel"></param>
        /// <returns></returns>
        private async Task SetQuizzesCompletedByCurrentUser(string currentUserId, TriviaDashboardViewModel viewModel)
        {
            var completedQuizzes = await TriviaService.GetCompletedQuizzesByUserAsync(currentUserId);

            foreach (var quiz in viewModel.NewQuizzes)
            {
                if (completedQuizzes.Any(q => q.Key == quiz.Id))
                {
                    quiz.IsComplete = true;
                }
            }

            foreach (var quizCollection in viewModel.DailyQuizzes.Values)
            {
                foreach (var quiz in quizCollection)
                {
                    if (completedQuizzes.Any(q => q.Key == quiz.Id))
                    {
                        quiz.IsComplete = true;
                    }
                }
            }
        }