pr1/Demo/Domain/UseCase/GroupUseCase.cs

128 lines
5.0 KiB
C#
Raw Permalink Normal View History

2024-10-19 21:39:57 +00:00
using Demo.Data.LocalData;
using Demo.Data.Repository;
using Demo.domain.Models;
namespace Demo.Domain.UseCase
{
2024-11-17 16:24:01 +00:00
// Класс, представляющий бизнес-логику для работы с группами
2024-10-19 21:39:57 +00:00
public class GroupUseCase
{
2024-11-17 16:24:01 +00:00
// Репозиторий для работы с группами (интерфейс)
private readonly IGroupRepository _repositoryGroupImpl;
2024-10-19 21:39:57 +00:00
2024-11-17 16:24:01 +00:00
// Конструктор, принимающий репозиторий в качестве зависимости
public GroupUseCase(IGroupRepository repositoryGroupImpl)
{
_repositoryGroupImpl = repositoryGroupImpl;
}
2024-10-19 21:39:57 +00:00
2024-11-17 16:24:01 +00:00
// Метод для проверки существования группы по ее ID
private GroupLocalEntity ValidateGroupExistence(int groupId)
2024-10-19 21:39:57 +00:00
{
2024-11-17 16:24:01 +00:00
// Получение группы по 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
};
2024-10-19 21:39:57 +00:00
}
2024-11-17 16:24:01 +00:00
// Метод получения всех групп
public List<Group> GetAllGroups()
2024-10-19 21:39:57 +00:00
{
2024-11-17 16:24:01 +00:00
// Получение всех групп и преобразование их в список объектов 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)
2024-10-19 21:39:57 +00:00
{
2024-11-17 16:24:01 +00:00
throw new ArgumentException("Группа не найдена.");
2024-10-19 21:39:57 +00:00
}
2024-11-17 16:24:01 +00:00
return group; // Возвращение найденной группы
2024-10-19 21:39:57 +00:00
}
2024-11-17 16:24:01 +00:00
// Метод добавления новой группы
public void AddGroup(string groupName)
2024-10-19 21:39:57 +00:00
{
2024-11-17 16:24:01 +00:00
// Определяем новый ID для группы
var newId = _repositoryGroupImpl.GetAllGroup().Any()
? _repositoryGroupImpl.GetAllGroup().Max(g => g.Id) + 1
: 1;
// Создаем новую группу
GroupLocalEntity newGroup = new GroupLocalEntity
2024-10-19 21:39:57 +00:00
{
2024-11-17 16:24:01 +00:00
Id = newId,
Name = groupName
};
// Добавление группы в репозиторий
_repositoryGroupImpl.AddGroup(newGroup);
}
// Метод удаления группы по ID
public void RemoveGroupById(int groupId)
{
// Проверяем существование группы
var existingGroup = ValidateGroupExistence(groupId);
// Получаем все группы для удаления
List<Group> _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("Группа не найдена."); // Если есть ошибки
2024-10-19 21:39:57 +00:00
}
2024-11-17 16:24:01 +00:00
}
2024-10-19 21:39:57 +00:00
2024-11-17 16:24:01 +00:00
// Метод изменения названия группы
public bool UpdateGroup(int groupId, string newGroupName)
{
// Проверяем существование группы по ID
var existingGroup = _repositoryGroupImpl.GetAllGroup()
.FirstOrDefault(g => g.Id == groupId);
// Если группа не найдена, возвращаем false
2024-10-19 21:39:57 +00:00
if (existingGroup == null)
{
2024-11-17 16:24:01 +00:00
return false;
2024-10-19 21:39:57 +00:00
}
2024-11-17 16:24:01 +00:00
// Обновляем название группы
existingGroup.Name = newGroupName;
2024-10-19 21:39:57 +00:00
2024-11-17 16:24:01 +00:00
// Сохраняем изменения в репозитории
_repositoryGroupImpl.UpdateGroupById(existingGroup.Id, existingGroup);
2024-10-19 21:39:57 +00:00
2024-11-17 16:24:01 +00:00
return true; // Успешное обновление
}
}
}