using Demo.Data.LocalData; using Demo.Data.Repository; using Demo.domain.Models; namespace Demo.Domain.UseCase { // Класс, представляющий бизнес-логику для работы с группами public class GroupUseCase { // Репозиторий для работы с группами (интерфейс) private readonly IGroupRepository _repositoryGroupImpl; // Конструктор, принимающий репозиторий в качестве зависимости public GroupUseCase(IGroupRepository repositoryGroupImpl) { _repositoryGroupImpl = repositoryGroupImpl; } // Метод для проверки существования группы по ее ID private GroupLocalEntity ValidateGroupExistence(int groupId) { // Получение группы по ID var existingGroup = _repositoryGroupImpl.GetAllGroup() .FirstOrDefault(g => g.Id == groupId); // Если группа не найдена if (existingGroup == null) { throw new ArgumentException("Группа не найдена."); } // Возвращение существующей группы return new GroupLocalEntity { Id = existingGroup.Id, Name = existingGroup.Name }; } // Метод получения всех групп public List GetAllGroups() { // Получение всех групп и преобразование их в список объектов Group return _repositoryGroupImpl.GetAllGroup() .Select(it => new Group { Id = it.Id, Name = it.Name }) .ToList(); } // Метод для поиска группы по ID public Group FindGroupById(int groupId) { // Ищем группу в списке всех групп var group = GetAllGroups().FirstOrDefault(g => g.Id == groupId); // Если группа не найдена if (group == null) { throw new ArgumentException("Группа не найдена."); } return group; // Возвращение найденной группы } // Метод добавления новой группы public void AddGroup(string groupName) { // Определяем новый ID для группы var newId = _repositoryGroupImpl.GetAllGroup().Any() ? _repositoryGroupImpl.GetAllGroup().Max(g => g.Id) + 1 : 1; // Создаем новую группу GroupLocalEntity newGroup = new GroupLocalEntity { Id = newId, Name = groupName }; // Добавление группы в репозиторий _repositoryGroupImpl.AddGroup(newGroup); } // Метод удаления группы по ID public void RemoveGroupById(int groupId) { // Проверяем существование группы var existingGroup = ValidateGroupExistence(groupId); // Получаем все группы для удаления List _groups = GetAllGroups(); // Находим группу по ID и удаляем ее из репозитория var groupToRemove = _groups.FirstOrDefault(g => g.Id == existingGroup.Id); if (groupToRemove != null) { _groups.Remove(groupToRemove); // Удаляем группу из списка (если нужно) _repositoryGroupImpl.RemoveGroupById(existingGroup.Id); // Удаляем из репозитория } else { throw new ArgumentException("Группа не найдена."); // Если есть ошибки } } // Метод изменения названия группы public bool UpdateGroup(int groupId, string newGroupName) { // Проверяем существование группы по ID var existingGroup = _repositoryGroupImpl.GetAllGroup() .FirstOrDefault(g => g.Id == groupId); // Если группа не найдена, возвращаем false if (existingGroup == null) { return false; } // Обновляем название группы existingGroup.Name = newGroupName; // Сохраняем изменения в репозитории _repositoryGroupImpl.UpdateGroupById(existingGroup.Id, existingGroup); return true; // Успешное обновление } } }