new_presence/domain/UseCase/UserUseCase.cs
2024-11-16 11:48:23 +03:00

99 lines
4.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using data.Exception;
using data.Repository;
using domain.Models;
namespace domain.UseCase
{
// Класс UserUseCase предоставляет операции с пользователями и их группами.
public class UserUseCase
{
private readonly IUserRepository _repositoryUserImpl; // Репозиторий для работы с пользователями.
private readonly IGroupRepository _repositoryGroupImpl; // Репозиторий для работы с группами.
// Конструктор для инициализации зависимостей.
public UserUseCase(IUserRepository repositoryImpl, IGroupRepository repositoryGroupImpl)
{
_repositoryUserImpl = repositoryImpl;// Репозиторий пользователей.
_repositoryGroupImpl = repositoryGroupImpl;// Репозиторий групп.
}
// Получить список всех пользователей с их группами.
public List<User> GetAllUsers() => _repositoryUserImpl.GetAllUsers.Join(_repositoryGroupImpl.GetAllGroup(),
user => user.GroupID,
group => group.Id,
(user, group) =>
new User
{
FIO = user.FIO,
Guid = user.Guid,
Group = new Group { Id = group.Id, Name = group.Name }
}).ToList();// Список пользователей.
// Удалить пользователя по GUID.
public bool RemoveUserByGuid(Guid userGuid)
{
try
{
// Возвращает true, если пользователь успешно удален, иначе false.
return _repositoryUserImpl.RemoveUserByGuid(userGuid);
}
catch (UserNotFoundException)
{
return false;// Пользователь не найден.
}
catch (RepositoryException)
{
return false;// Общая ошибка репозитория.
}
}
// Обновить информацию о пользователе.
public User UpdateUser(User user)
{
// Обновление пользователя в репозитории.
var updatedUser = _repositoryUserImpl.UpdateUser(new UserLocalEntity
{
FIO = user.FIO,
GroupID = user.Group.Id,
Guid = user.Guid
}) ?? throw new Exception("Ошибка при обновлении пользователя.");
// Получение информации о группе.
var group = _repositoryGroupImpl.GetAllGroup()
.FirstOrDefault(g => g.Id == updatedUser.GroupID)
?? throw new Exception("Группа не найдена.");
// Возврат обновленного пользователя.
return new User
{
FIO = updatedUser.FIO,
Guid = updatedUser.Guid,
Group = new Group { Id = group.Id, Name = group.Name }
};
}
// Найти пользователя по GUID.
public User FindUserByGuid(Guid userGuid)
{
// Поиск пользователя и его группы.
var user = _repositoryUserImpl.GetAllUsers
.FirstOrDefault(u => u.Guid == userGuid)
?? throw new Exception("Пользователь не найден.");
var group = _repositoryGroupImpl.GetAllGroup()
.FirstOrDefault(g => g.Id == user.GroupID)
?? throw new Exception("Группа не найдена.");
// Возврат пользователя с группой.
return new User
{
FIO = user.FIO,
Guid = user.Guid,
Group = new Group { Id = group.Id, Name = group.Name }
};
}
}
}