presence123/Demo/Domain/UseCase/UserUseCase.cs

83 lines
2.8 KiB
C#
Raw Normal View History

2024-10-30 09:06:35 +00:00
using Demo.Data.Repository;
using Demo.Domain.Models;
using Demo.Data.Exceptions; // Подключаем пространство имён для исключений
using System;
using System.Collections.Generic;
using System.Linq;
using Demo.domain.Models;
namespace Demo.Domain.UseCase
{
public class UserUseCase
{
private readonly UserRepositoryImpl _userRepository;
private readonly IGroupRepository _groupRepository;
public UserUseCase(UserRepositoryImpl userRepository, IGroupRepository groupRepository)
{
_userRepository = userRepository;
_groupRepository = groupRepository;
}
// Получение всех групп
private List<Group> GetAllGroups() =>
_groupRepository.GetAllGroups()
.Select(g => new Group { Id = g.Id, Name = g.Name })
.ToList();
// Получение всех пользователей
public List<User> GetAllUsers() =>
_userRepository.GetAllUsers
.Join(_groupRepository.GetAllGroups(),
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
{
_userRepository.DeleteUserByGuid(userGuid);
return true;
}
catch (GuidNotFoundException)
{
// Логируем ошибку, если нужно
return false;
}
}
// Обновление пользователя
public User UpdateUser(User user)
{
try
{
_userRepository.UpdateUser(user.Guid.ToString(), user.FIO, user.Group.Id);
var group = GetAllGroups().FirstOrDefault(g => g.Id == user.Group.Id);
if (group == null)
{
throw new Exception($"Группа с ID {user.Group.Id} не найдена.");
}
return new User { FIO = user.FIO, Guid = user.Guid, Group = group };
}
catch (GuidNotFoundException ex)
{
throw new Exception("Пользователь не найден.", ex);
}
catch (ArgumentException ex)
{
throw new Exception("Некорректный GUID.", ex);
}
}
}
}