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; }
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; }