Esempio n. 1
0
        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);
        }