private QuizItemResultsModel PopulateResultsForLawSectionAnswer(string userId, AnonymousUserService auService, ApplicationDbContext context, QuizItem questionItem) { // Populate general law data var item = new QuizItemResultsModel { LawId = questionItem.LawSection.LawID, LawTitle = questionItem.LawSection.Law.Title, SectionId = questionItem.LawSection.LawSectionID, SectionTitle = questionItem.LawSection.Title, QuestionDescription = questionItem.LawSection.Text, ImageRelativePath = questionItem.LawSection.ImageRelativePath, QuestionType = QuizItemType.LawSection }; // This is copied from Law service. Look to make it generic with expression trees var sectionVotingResults = context.LawSectionVotes .Where(x => x.LawSectionID == questionItem.LawSection.LawSectionID) .GroupBy(x => x.Vote) .Select(g => new { Key = g.Key, Count = g.Count() }) .ToList(); var unsafeResult = sectionVotingResults.Where(x => x.Key.HasValue && x.Key.Value).FirstOrDefault(); item.VotesUp = unsafeResult == null ? 0 : unsafeResult.Count; unsafeResult = sectionVotingResults.Where(x => x.Key.HasValue && !x.Key.Value).FirstOrDefault(); item.VotesDown = unsafeResult == null ? 0 : unsafeResult.Count; item.VotesDownPercentage = Infrastructure.Math.Percentage(item.VotesDown, item.VotesDown + item.VotesUp); item.VotesUpPercentage = Infrastructure.Math.Percentage(item.VotesUp, item.VotesDown + item.VotesUp); if (userId != null) { var userVote = context.LawSectionVotes .Include(x => x.LawSectionCustomVote) .Where(x => x.ApplicationUserID == userId && x.LawSectionID == questionItem.LawSection.LawSectionID) .FirstOrDefault(); if (userVote != null) { item.UserVote = userVote.Vote; if (userVote.LawSectionCustomVote != null) { item.CustomUserVoteText = userVote.LawSectionCustomVote.Text; } } } else { item.UserVote = auService.GetUserLawSectionVoteBool(questionItem.LawSection.LawSectionID); item.CustomUserVoteText = auService.GetUserLawSectionVoteCustomText(questionItem.LawSection.LawSectionID); } return(item); }
internal QuizResultsModel GetQuizResults(int id, string userId) { var auService = new AnonymousUserService(); using (var context = ApplicationDbContext.Create()) { var quiz = context .Quizes .Include(x => x.Items) .Include("Items.Law") .Include("Items.LawSection.Law") .Where(x => x.QuizId == id) .FirstOrDefault(); if (quiz == null) { return(null); } var result = new QuizResultsModel { QuizId = quiz.QuizId, TimeCreated = quiz.TimeCreated, Description = quiz.Description, Title = quiz.Title, ImageRelativePath = quiz.ImageRelativePath, Items = new List <QuizItemResultsModel>() }; foreach (var questionItem in quiz.Items) { QuizItemResultsModel item = null; if (questionItem.Type == QuizItemType.Law) { item = PopulateResultsForLawAnswer(userId, auService, context, questionItem); } else if (questionItem.Type == QuizItemType.LawSection) { item = PopulateResultsForLawSectionAnswer(userId, auService, context, questionItem); } result.Items.Add(item); } return(result); } }