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)); }
/// <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; } } } }