public UserDto Get(Guid id)
        {
            var userRepo = new UserRepositoryDocumentDB();
            var usr      = userRepo.GetUserById(id);

            return(UserDtoConverter.ConvertToDTO(usr));
        }
        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);
        }
        public GetModuleResultsResponse UserModuleResults(Guid moduleId)
        {
            var userRepo = new UserRepositoryDocumentDB();
            var usr      = userRepo.GetUserById((Guid)HttpContext.Current.Items["UserId"]);

            var coachingModuleRepository = new CoachingModuleRepositoryDocumentDB();
            var module        = coachingModuleRepository.GetModuleById(moduleId);
            var moduleResults = usr.CourseAdmissions.Single().Results.Where(r =>
                                                                            r.Module.ModuleReferenceId == module.Id
                                                                            ).ToList();
            var moduleResult = new GetModuleResultsResponse()
            {
                ModuleResults = moduleResults.Select(mr =>
                                                     UserDtoConverter.ConvertScoreCardDto(mr)).ToList(),
                IsCompleted = moduleResults.All(mr => mr.IsCompleted)
            };

            var activeModule = moduleResults.FirstOrDefault(mr => !mr.IsCompleted);

            if (activeModule != null)
            {
                moduleResult.IsActive        = true;
                moduleResult.ActiveScoreCard = moduleResult.ModuleResults.First(mr => !mr.IsCompleted);
            }
            else
            {
                moduleResult.IsActive = false;
            }

            return(moduleResult);
        }
        public UserDto CurrentUser()
        {
            var userRepo = new UserRepositoryDocumentDB();
            //var usr = userRepo.GetAllItems().Last();
            var usr = userRepo.GetUserById((Guid)HttpContext.Current.Items["UserId"]);

            return(UserDtoConverter.ConvertToDTO(usr));
        }
        public ScoreCardDto GetExerciseResults(Guid userId, Guid exerciseId)
        {
            var userRepo = new UserRepositoryDocumentDB();
            var usr      = userRepo.GetUserById(userId);

            foreach (var admission in usr.CourseAdmissions)
            {
                var excistingScoreCard = admission.Results.SingleOrDefault(r => r.ExerciseId == exerciseId);

                return(UserDtoConverter.ConvertScoreCardDto(excistingScoreCard));
            }

            throw new Exception("Scorecard not found");
        }
        public GetUserVideoResultResponse GetUserVideoResult(Guid userId, string uuid)
        {
            var userRepo = new UserRepositoryDocumentDB();
            var usr      = userRepo.GetUserById(userId);

            foreach (var admission in usr.CourseAdmissions)
            {
                var excistingScoreCard = admission.Results.OfType <VideoExerciseScoreCard>().SingleOrDefault(r => r.VideoUuid == uuid);

                var ret = new GetUserVideoResultResponse();

                ret.ScoreCard     = UserDtoConverter.ConvertScoreCardDto(excistingScoreCard);
                ret.UserFirstName = usr.FirstName;
                ret.UserLastName  = usr.LastName;

                return(ret);
            }

            throw new Exception("Scorecard not found");
        }