public async Task <LessonContentRespond> GetLesson(int id) { EF.CourseCatalog courseCatalog; Lesson lessonCatalog; using (var dctx = new EF.MindSageDataModelsContainer()) { lessonCatalog = await dctx.Lessons .Include("Unit.Semester") .Include("TeacherLessonItems") .Include("TeacherLessonItems") .Include("StudentLessonItems") .Include("PreAssessments.Assessments.Choices") .Include("PostAssessments.Assessments.Choices") .FirstOrDefaultAsync(it => it.Id == id); if (lessonCatalog == null) { return(null); } courseCatalog = await dctx.CourseCatalogs .Include("Semesters.Units") .FirstOrDefaultAsync(it => it.Id == lessonCatalog.Unit.Semester.CourseCatalogId); if (courseCatalog == null) { return(null); } } var semesters = courseCatalog.Semesters.Where(it => !it.RecLog.DeletedDate.HasValue).OrderBy(it => it.RecLog.CreatedDate); var semesterRunner = 65; foreach (var item in semesters) { if (item.Id == lessonCatalog.Unit.SemesterId) { break; } semesterRunner++; } var units = semesters.SelectMany(it => it.Units).Where(it => !it.RecLog.DeletedDate.HasValue).OrderBy(it => it.RecLog.CreatedDate); var unitRunner = 1; foreach (var item in units) { if (item.Id == lessonCatalog.UnitId) { break; } unitRunner++; } var teacherItemQry = createLessonItems(lessonCatalog.TeacherLessonItems); var studentItemQry = createLessonItems(lessonCatalog.StudentLessonItems); var preAssessmentQry = createAssessmentItems(lessonCatalog.PreAssessments); var postAssessmentQry = createAssessmentItems(lessonCatalog.PostAssessments); var result = new LessonContentRespond { //ExtraContents = extraContents, CreatedDate = lessonCatalog.RecLog.CreatedDate, IsPreviewable = lessonCatalog.IsPreviewable, SemesterName = string.Format("{0}", (char)semesterRunner), Title = lessonCatalog.Title, Order = unitRunner, TeacherItems = teacherItemQry, StudentItems = studentItemQry, PreAssessments = preAssessmentQry, PostAssessments = postAssessmentQry, }; return(result); }
public LessonContentRespond Get(string id, string classRoomId, string userId) { var areArgumentsValid = !string.IsNullOrEmpty(id) && !string.IsNullOrEmpty(classRoomId) && !string.IsNullOrEmpty(userId); if (!areArgumentsValid) { return(null); } UserProfile userprofile; var canAccessToTheClassRoom = _userprofileRepo.CheckAccessPermissionToSelectedClassRoom(userId, classRoomId, out userprofile); if (!canAccessToTheClassRoom) { return(null); } var subscriptions = userprofile.Subscriptions .Where(it => !it.DeletedDate.HasValue) .Where(it => it.ClassRoomId.Equals(classRoomId, StringComparison.CurrentCultureIgnoreCase)); if (!subscriptions.Any()) { return(null); } var now = _dateTime.GetCurrentTime(); var isTeacher = subscriptions.Any(it => it.Role == UserProfile.AccountRole.Teacher); var canAccessToTheClassLesson = _classCalendarRepo.CheckAccessPermissionToSelectedClassLesson(classRoomId, id, now, isTeacher); if (!canAccessToTheClassLesson) { return(null); } var selectedClassRoom = _classRoomRepo.GetClassRoomById(classRoomId); var isClassRoomValid = selectedClassRoom != null && !selectedClassRoom.DeletedDate.HasValue; if (!isClassRoomValid) { return(null); } var selectedLesson = selectedClassRoom.Lessons.FirstOrDefault(it => it.id.Equals(id, StringComparison.CurrentCultureIgnoreCase)); if (selectedLesson == null) { return(null); } var selectedLessonCatalog = _lessonCatalogRepo.GetLessonCatalogById(selectedLesson.LessonCatalogId); if (selectedLessonCatalog == null) { return(null); } var selectedUserActivity = _userActivityRepo.GetUserActivityByUserProfileIdAndClassRoomId(userId, classRoomId); var isUserActivityValid = selectedUserActivity != null && !selectedUserActivity.DeletedDate.HasValue; if (!isUserActivityValid) { return(null); } var selectedLessonActivity = selectedUserActivity.LessonActivities.FirstOrDefault(it => it.LessonId.Equals(id, StringComparison.CurrentCultureIgnoreCase)); if (selectedLessonActivity == null) { return(null); } var selectedSubscription = userprofile.Subscriptions.FirstOrDefault(it => it.ClassRoomId == classRoomId); if (selectedSubscription == null) { return(null); } selectedSubscription.LastActiveDate = now; _userprofileRepo.UpsertUserProfile(userprofile); var shouldUpdateSawPrimaryContent = !selectedLessonActivity.SawContentIds.Contains(selectedLessonCatalog.id); if (shouldUpdateSawPrimaryContent) { var sawList = selectedLessonActivity.SawContentIds.ToList(); sawList.Add(selectedLessonCatalog.id); selectedLessonActivity.SawContentIds = sawList; _userActivityRepo.UpsertUserActivity(selectedUserActivity); } var isDisplayTeacherMsg = selectedUserActivity.HideClassRoomMessageDate.HasValue ? selectedClassRoom.LastUpdatedMessageDate > selectedUserActivity.HideClassRoomMessageDate.Value : true; var result = new LessonContentRespond { id = id, Order = selectedLessonCatalog.Order, SemesterName = selectedLessonCatalog.SemesterName, UnitNo = selectedLessonCatalog.UnitNo, CourseCatalogId = selectedLessonCatalog.CourseCatalogId, Title = selectedLessonCatalog.Title, CreatedDate = selectedLessonCatalog.CreatedDate, Advertisments = selectedLessonCatalog.Advertisments, CourseMessage = isDisplayTeacherMsg ? selectedClassRoom.Message : null, IsTeacher = isTeacher, TotalLikes = selectedLesson.TotalLikes, StudentItems = selectedLessonCatalog.StudentItems ?? Enumerable.Empty <LessonCatalog.LessonItem>(), TeacherItems = selectedLessonCatalog.TeacherItems ?? Enumerable.Empty <LessonCatalog.LessonItem>(), PostAssessments = selectedLessonCatalog.PostAssessments ?? Enumerable.Empty <LessonCatalog.AssessmentItem>(), PreAssessments = selectedLessonCatalog.PreAssessments ?? Enumerable.Empty <LessonCatalog.AssessmentItem>(), }; result.StudentItems = result.StudentItems.OrderBy(it => it.Order); result.TeacherItems = result.TeacherItems.OrderBy(it => it.Order); result.PostAssessments = result.PostAssessments.OrderBy(it => it.Order); result.PreAssessments = result.PreAssessments.OrderBy(it => it.Order); return(result); }