private GetUserResultsResponse UserResults(User usr) { //Load modules var coachingCourseRepository = new CoachingCourseRepositoryDocumentDB(); var coachingModuleRepository = new CoachingModuleRepositoryDocumentDB(); var moduleGroupRepository = new ModuleGroupRepositoryDocumentDB(); //TODO: Support multiple course admissions var course = coachingCourseRepository.GetCourseById(usr.CourseAdmissions.Single().CourseId); var modules = coachingModuleRepository.GetModulesWithIds(course.Modules.Select(m => m.ModuleReferenceId)).ToList(); var moduleGroups = moduleGroupRepository.GetItemsWithIds(course.ModuleGroups); var userResults = new GetUserResultsResponse() { ModuleResults = modules.Select(m => { var moduleResults = usr.CourseAdmissions.Single().Results.Where(r => r.Module.ModuleReferenceId == m.Id ).ToList(); return(new ModuleResultsDto() { Module = CoachingModuleDTOConverter.ConvertToDTO(m), ModuleResults = moduleResults.Select(mr => UserDtoConverter.ConvertScoreCardDto(mr)).ToList() }); }).ToList(), Groups = moduleGroups.Select(CoachingModuleDTOConverter.ConvertToDTO), User = UserDtoConverter.ConvertUserToBaseDto(usr) }; userResults.ActiveModule = userResults.ModuleResults.FirstOrDefault(mr => mr.ModuleResults.Any(r => !r.IsCompleted)).Module; userResults.ActiveModuleIndex = modules.IndexOf(modules.Single(m => m.Id == userResults.ActiveModule.Id)); return(userResults); }
private void LoadCompletedScoreCardExercises(GetUserResultsResponse response) { var completedScoreCards = response.ModuleResults.SelectMany(m => m.ModuleResults.Where(r => r.IsCompleted)); var exerciseIds = completedScoreCards.Select(e => e.ExerciseId).ToList(); var exerciseRepository = new CoachnigModuleExerciseResourceRepositoryDocumentDB(); var exercises = exerciseRepository.GetItemsAsQueryable().SelectMany(er => er.Elements) .Where(el => exerciseIds.Contains(el.Exercise.Id)).AsEnumerable().ToList(); foreach (var scoreCard in completedScoreCards) { scoreCard.Exercise = ModuleResourceDTOConverter.ConvertToDTO(exercises.Single(e => e.Exercise.Id == scoreCard.ExerciseId)); } }