public async Task AddStudentToGroupAsync(StudentGroupModel studentGroupModel) { var dbStudent = await _unitOfWork.StudentRepository.GetAsync(x => x.Id == studentGroupModel.StudentId, includeProperties : nameof(DbStudent.Group)); if (dbStudent == null) { throw new NotFoundException(typeof(DbStudent), studentGroupModel.StudentId); } var existingStudentGroup = dbStudent.Group.FirstOrDefault(x => x.Id == studentGroupModel.GroupId); if (existingStudentGroup != null) { throw new InvalidOperationException("Student is already in this group."); } ; var dbGroup = await _unitOfWork.GroupRepository.FindByIdAsync(studentGroupModel.GroupId); if (dbGroup == null) { throw new NotFoundException(typeof(DbGroup), studentGroupModel.GroupId); } dbStudent.Group.Add(dbGroup); await _unitOfWork.StudentRepository.UpdateAsync(dbStudent); }
public async Task RemoveStudentFromGroupAsync(StudentGroupModel studentGroupModel) { var dbStudent = await _unitOfWork.StudentRepository.GetAsync(x => x.Id == studentGroupModel.StudentId, includeProperties : nameof(DbStudent.Group)); if (dbStudent == null) { throw new NotFoundException(typeof(DbStudent), studentGroupModel.StudentId); } dbStudent.Group.RemoveAll(x => x.Id == studentGroupModel.GroupId); await _unitOfWork.StudentRepository.UpdateAsync(dbStudent); }
public IActionResult Index(int count, string messages) { List <int> canSendMessagesList; List <string> response = new List <string>(); // Распарсим строку в список. try { canSendMessagesList = messages.Split(' ').Select(x => int.Parse(x)).ToList(); } catch (Exception e) { response.Add($"Неправильная последовательность чисел: {messages}." + $"Ошибка: {e.Message}"); return(View()); } // Текущая группа студентов. var studentGroupModel = new StudentGroupModel { StudentsCount = count, AllMessagesCounter = 0, StudentsList = new List <StudentModel>() }; var results = new List <ValidationResult>(); var context = new ValidationContext(studentGroupModel); // Проверяем правильность данных введеннх пользователем. if (!Validator.TryValidateObject(studentGroupModel, context, results, true)) { string err = string.Empty; foreach (var error in results) { err += $" {error.ErrorMessage} "; } response.Add(err); return(View()); } // Создадим студентов внутри группы. for (int i = 0; i < studentGroupModel.StudentsCount; i++) { studentGroupModel.StudentsList.Add(new StudentModel()); studentGroupModel.StudentsList[i].CanSendMessagesCount = canSendMessagesList[i]; studentGroupModel.StudentsList[i].Index = i + 1; } // Поликарп первым узнал новость. studentGroupModel.StudentsList[0].IsGetMessage = true; // Сортируем студентов по убыванию количества сообщений, которые они могут послать. // Для того, чтобы все студенты могли получить сообщения. var sortedList = studentGroupModel.StudentsList. OrderByDescending(o => o.CanSendMessagesCount). ToList().Where(o => o != studentGroupModel.StudentsList[0]).Select(o => o); var studentModels = new List <StudentModel>(); studentModels.Add(studentGroupModel.StudentsList[0]); studentModels.AddRange(sortedList.ToList()); List <StudentModel> ls = sortedList.ToList(); // Отправка студентами, знающими о зачете, сообщений // другим студентам, не знающим о зачете. // Проходим циклом по всем студентам. for (int i = 0; i < studentModels.Count; i++) { // Каждый студент отправляет сообщений не больше, чем позволяет его социофобия (ai). for (int j = 0; studentModels[i].CanSendMessagesCount != studentModels[i].SentMessagesCount; j++) { // Если студент не получал сообщение, то // он его и не может отправить другим. if (!studentModels[i].IsGetMessage) { break; } try { // Отправка сообщения, если студент не получил сообщение. if (!studentModels[i + 1 + j].IsGetMessage) { studentModels[i + 1 + j].IsGetMessage = true; studentModels[i].SentMessagesCount++; response.Add($"{studentModels[i].Index} - {studentModels[i + 1 + j].Index}"); studentGroupModel.AllMessagesCounter++; } } catch { break; } } } response.Add($"Всего сообщений отправлено: {studentGroupModel.AllMessagesCounter}"); // Если невозможно сообщить всем студентам об экзамене. foreach (var st in studentModels) { if (!st.IsGetMessage) { response.Clear(); response.Add($"-1"); response.Add($"Сообщений отправлено: {studentGroupModel.AllMessagesCounter}"); response.Add($"Студентов: {studentGroupModel.StudentsCount}"); } } ViewData.Add("Response", response); return(View()); }
public async Task <IActionResult> RemoveStudentFromGroup(StudentGroupModel studentGroupModel) { await _studentsService.RemoveStudentFromGroupAsync(studentGroupModel); return(NoContent()); }
public async Task <IActionResult> AddStudentToGroup(StudentGroupModel studentGroupModel) { await _studentsService.AddStudentToGroupAsync(studentGroupModel); return(NoContent()); }