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) { var existingGroup = _repositoryGroupImpl.GetAllGroup() .FirstOrDefault(g => g.Id == groupId); if (existingGroup == null) { throw new ArgumentException("Группа не найдена."); } return existingGroup; } // Метод для получения списка всех групп public List GetAllGroups() { return [.. _repositoryGroupImpl.GetAllGroup() .Select(it => new Group { Id = it.Id, Name = it.Name })]; } 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) { var newId = _repositoryGroupImpl.GetAllGroup().Any() ? _repositoryGroupImpl.GetAllGroup().Max(g => g.Id) + 1 : 1; GroupLocalEntity newGroup = new GroupLocalEntity { Id = newId, Name = groupName }; _repositoryGroupImpl.AddGroup(newGroup); } 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 void UpdateGroup(int groupId, string newGroupName) { var existingGroup = ValidateGroupExistence(groupId); existingGroup.Name = newGroupName; _repositoryGroupImpl.UpdateGroupById(existingGroup.Id, existingGroup); } } }