// ReSharper disable once UnusedMember.Global public IEnumerable <LessonResponse> Post(LessonGetAllRequest request) { Guard.AgainstEmpty(request.Provider); Guard.AgainstEmpty(request.ProviderId); var existingUser = UserHelpers.GetExistingUser(request, UserRepository); Guard.IsTrue(eu => eu.IsNew == false, existingUser); var allLessons = LessonRepository.GetAllNonDeleted(); var allAuthors = allLessons.DistinctBy(al => new { al.Provider, al.ProviderId }).Select(au => UserRepository.GetUserByProviderAndProviderId(au.Provider, au.ProviderId)); return(allLessons .Select(lesson => new { Grade = existingUser.IsStudent ? GradeRepository.GetGrade(lesson.Id, request.Provider, request.ProviderId) : new GradeModel(), Lesson = lesson }) .Select(x => new LessonResponse // TODO: Use Automapper { Id = x.Lesson.Id, BookTitle = x.Lesson.BookTitle, BookAmazonUrl = x.Lesson.BookAmazonUrl, TheHookYouTubeVideo = x.Lesson.TheHookYouTubeVideo, TheTwoVocabularyWordsYouTubeVideo = x.Lesson.TheTwoVocabularyWordsYouTubeVideo, EnunciationVideo1 = x.Lesson.EnunciationVideo1, EnunciationVideo2 = x.Lesson.EnunciationVideo2, MainIdea = x.Lesson.MainIdea, SupportingIdea = x.Lesson.SupportingIdea, StoryDetails = x.Lesson.StoryDetails, StoryQuestions = x.Lesson.StoryQuestions, ImportantSentencesForWordScramble = x.Lesson.ImportantSentencesForWordScramble, LessonAuthor = allAuthors.Single(aa => aa.Provider == x.Lesson.Provider && aa.ProviderId == x.Lesson.ProviderId), NumberOfEnrolledStudents = x.Lesson.NumberOfEnrolledStudents, GradeResponse = x.Grade == null ? new GradeResponse() : new GradeResponse { IsGraded = true, Grade = x.Grade.Grade, Comments = x.Grade.Comments } })); }