using data.RemoteData.RemoteDataBase.DAO; using data.Repository; using data.domain.Models; namespace data.Domain.UseCase { public class GroupUseCase { private readonly IGroupRepository _SQLGroupRepositoryImpl; public GroupUseCase(IGroupRepository SQlGroupRepositoryImpl) { _SQLGroupRepositoryImpl = SQlGroupRepositoryImpl; } // Приватный метод для валидации имени группы private void ValidateGroupName(string groupName) { if (string.IsNullOrWhiteSpace(groupName)) { throw new ArgumentException("Имя группы не может быть пустым."); } } public void RemoveAllStudentsFromGroup(int groupId) { var existingGroup = ValidateGroupExistence(groupId); _SQLGroupRepositoryImpl.RemoveAllStudentsFromGroup(existingGroup.Id); } public void AddStudentToGroup(int groupId, User newStudent) { // Проверяем существование группы по ID var existingGroup = ValidateGroupExistence(groupId); // Создаем UserDao для добавления в базу данных UserDao studentDao = new UserDao { FIO = newStudent.FIO }; // Проверка существования пользователя в группе (по GUID) var existingStudent = existingGroup.Users.FirstOrDefault(u => u.UserId == newStudent.ID); if (existingStudent != null) { throw new ArgumentException($"Студент с ID {newStudent.ID} уже добавлен в эту группу."); } // Добавляем студента в группу _SQLGroupRepositoryImpl.AddStudentToGroup(existingGroup.Id, studentDao); } private void ValidateGroupId(int GroupId) { if (GroupId < 1) { throw new ArgumentException("Введите корректный ID группы."); } } // Приватный метод для валидации существования группы по ID private GroupDao ValidateGroupExistence(int groupId) { var existingGroup = _SQLGroupRepositoryImpl.GetAllGroups() .FirstOrDefault(g => g.Id == groupId); if (existingGroup == null) { throw new ArgumentException("Группа не найдена."); } return existingGroup; } // Метод для получения списка всех групп public List GetAllGroups() { return _SQLGroupRepositoryImpl.GetAllGroups(); } // Метод для получения группы по ID public string FindGroupById(int IdGroup) { string groups = _SQLGroupRepositoryImpl.GetGroupById(IdGroup).Name; return groups; } // Метод для добавления новой группы public void AddGroup(string groupName) { ValidateGroupName(groupName); GroupDao newGroup = new GroupDao { Name = groupName }; _SQLGroupRepositoryImpl.AddGroup(newGroup.Name); } // Метод для изменения названия группы public void UpdateGroup(int groupId, string newGroupName) { ValidateGroupName(newGroupName); var existingGroup = ValidateGroupExistence(groupId); existingGroup.Name = newGroupName; _SQLGroupRepositoryImpl.UpdateGroupById(groupId, existingGroup); } } }