예제 #1
0
        private async Task<bool> addNewCourseByTeacherCode(string code, string grade, UserProfile selectedUserProfile, DateTime currentTime)
        {
            var selectedContract = await _contractRepo.GetContractsByTeacherCode(code, grade);
            var isTeacherKey = selectedContract != null
                && !selectedContract.DeletedDate.HasValue
                && selectedContract.Licenses.Any();
            if (!isTeacherKey) return false;

            var selectedLicense = selectedContract.Licenses
                .Where(it => !it.DeletedDate.HasValue)
                .FirstOrDefault(it => it.TeacherKeys.Any(t => !t.DeletedDate.HasValue && t.Code == code && t.Grade == grade));
            if (selectedLicense == null) return false;

            var selectedTeacherKey = selectedLicense.TeacherKeys
                .Where(it => !it.DeletedDate.HasValue)
                .OrderBy(it => it.CreatedDate)
                .LastOrDefault();
            if (selectedTeacherKey == null) return false;

            // Create new ClassRoom
            var selectedCourseCatalog = _courseCatalogRepo.GetCourseCatalogById(selectedLicense.CourseCatalogId);
            if (selectedCourseCatalog == null) return false;
            var lessonCatalogs = _lessonCatalogRepo.GetLessonCatalogByCourseCatalogId(selectedCourseCatalog.id).ToList();
            if (lessonCatalogs == null || !lessonCatalogs.Any()) return false;
            var lessons = lessonCatalogs
                .Where(it => !it.DeletedDate.HasValue)
                .Select(it => new ClassRoom.Lesson
                {
                    id = Guid.NewGuid().ToString(),
                    LessonCatalogId = it.id
                }).ToList();
            var newClassRoom = new ClassRoom
            {
                id = Guid.NewGuid().ToString(),
                Name = selectedCourseCatalog.SideName,
                CourseCatalogId = selectedCourseCatalog.id,
                CreatedDate = currentTime,
                LastUpdatedMessageDate = currentTime,
                Lessons = lessons
            };
            await _classRoomRepo.CreateNewClassRoom(newClassRoom);

            // Create new ClassCalendar
            var lessonCalendars = lessonCatalogs
                .Where(it => !it.DeletedDate.HasValue)
                .Select(lesson =>
                {
                    var selectedLesson = lessons.FirstOrDefault(it => it.LessonCatalogId == lesson.id);
                    return new ClassCalendar.LessonCalendar
                    {
                        id = Guid.NewGuid().ToString(),
                        Order = lesson.Order,
                        SemesterGroupName = lesson.SemesterName,
                        BeginDate = currentTime,
                        CreatedDate = currentTime,
                        LessonId = selectedLesson.id,
                        TopicOfTheDays = lesson.TopicOfTheDays
                            .Where(it => !it.DeletedDate.HasValue)
                            .Select(it => new ClassCalendar.TopicOfTheDay
                            {
                                id = it.id,
                                Message = it.Message,
                                SendOnDay = it.SendOnDay,
                                CreatedDate = currentTime,
                            })
                    };
                }).ToList();
            var newClassCalendar = new ClassCalendar
            {
                id = Guid.NewGuid().ToString(),
                ClassRoomId = newClassRoom.id,
                CreatedDate = currentTime,
                Holidays = Enumerable.Empty<DateTime>(),
                ShiftDays = Enumerable.Empty<DateTime>(),
                LessonCalendars = lessonCalendars
            };
            await _classCalendarRepo.CreateNewClassCalendar(newClassCalendar);

            // Create new UserActivity
            var userActivity = selectedUserProfile.CreateNewUserActivity(newClassRoom, newClassCalendar, lessonCatalogs, currentTime);
            _userActivityRepo.UpsertUserActivity(userActivity);

            // Create new subscription
            var subscriptions = createNewSubscription(selectedUserProfile.Subscriptions, UserProfile.AccountRole.Teacher, newClassRoom, newClassCalendar.id, selectedLicense.id, currentTime);
            selectedUserProfile.Subscriptions = subscriptions;
            _userprofileRepo.UpsertUserProfile(selectedUserProfile);

            // Create new student key
            var newStudentKey = new StudentKey
            {
                id = Guid.NewGuid().ToString(),
                Grade = grade,
                Code = generateStudentCode(grade),
                CourseCatalogId = selectedCourseCatalog.id,
                ClassRoomId = newClassRoom.id,
                CreatedDate = currentTime
            };

            await _studentKeyRepo.CreateNewStudentKey(newStudentKey);
            return true;
        }
예제 #2
0
        private bool addNewCourseByStudentCode(UserProfile selectedUserProfile, StudentKey selectedStudentKey, DateTime currentTime)
        {
            var canUserprofileAccessToTheClassRoom = selectedUserProfile.Subscriptions
                .Where(it => !it.DeletedDate.HasValue)
                .Any(it => it.ClassRoomId == selectedStudentKey.ClassRoomId);
            if (canUserprofileAccessToTheClassRoom) return false;

            var selectedClassRoom = _classRoomRepo.GetClassRoomById(selectedStudentKey.ClassRoomId);
            if (selectedClassRoom == null) return false;

            var selectedClassCalendar = _classCalendarRepo.GetClassCalendarByClassRoomId(selectedStudentKey.ClassRoomId);
            if (selectedClassCalendar == null) return false;

            var lessonCatalogs = selectedClassRoom.Lessons
                .Select(it => _lessonCatalogRepo.GetLessonCatalogById(it.LessonCatalogId))
                .ToList();
            if (lessonCatalogs.Any(it => it == null)) return false;

            var teacherSubscription = _userprofileRepo.GetUserProfilesByClassRoomId(selectedClassRoom.id)
                .Where(it => !it.DeletedDate.HasValue)
                .SelectMany(it => it.Subscriptions)
                .Where(it => !it.DeletedDate.HasValue)
                .Where(it => it.Role == UserProfile.AccountRole.Teacher)
                .Where(it => it.ClassRoomId == selectedClassRoom.id)
                .FirstOrDefault();
            if (teacherSubscription == null)
            {
                _logger.LogWarning($"Teacher account in the private ClassRoomId: { selectedStudentKey.ClassRoomId } not found.");
                return false;
            }

            selectedUserProfile.Subscriptions = createNewSubscription(selectedUserProfile.Subscriptions,
                UserProfile.AccountRole.Student,
                selectedClassRoom,
                selectedClassCalendar.id,
                teacherSubscription.LicenseId,
                currentTime);
            _userprofileRepo.UpsertUserProfile(selectedUserProfile);

            var userActivity = selectedUserProfile.CreateNewUserActivity(selectedClassRoom, selectedClassCalendar, lessonCatalogs, currentTime);
            _userActivityRepo.UpsertUserActivity(userActivity);

            return true;
        }