using AutoMapper; using UserManagement.Application.Dtos.Incomming; using UserManagement.Application.Dtos.Outgoing; using UserManagement.Application.Interfaces; using UserManagement.Domain.Entities; using UserManagement.Infrastructure.Interfaces; namespace UserManagement.Application.Services { public class UserService : IUserService { // CTOR private readonly IUserRepository _userRepository; private readonly IRoleRepository _roleRepository; private readonly IMapper _mapper; public UserService(IUserRepository userRepository, IRoleRepository roleRepository, IMapper mapper) { _userRepository = userRepository; _roleRepository = roleRepository; _mapper = mapper; } // CREATE public async Task AddUserAsync(CreatingUserDto creatingUserDto) { // validating role var role = await _roleRepository.GetByIdAsync(creatingUserDto.RoleId); if (role == null) { throw new ArgumentException("Role not found"); } // mapping dto to entity var user = _mapper.Map(creatingUserDto); var created = await _userRepository.AddAsync(user); return created; } // READ ALL public async Task> GetUsersAsync() { var users = await _userRepository.GetAllAsync(); var readDto = _mapper.Map>(users); return readDto; } // READ BY ID public async Task GetByIdAsync(int id) { var user = await _userRepository.GetByIdAsync(id); var readDto = _mapper.Map(user); return readDto; } // READ BY USERNAME public async Task GetByUsernameAsync(string username) { var user = await _userRepository.GetByUsernameAsync(username); var readDto = _mapper.Map(user); return readDto; } // UPDATE public async Task UpdateUserAsync(UpdatingUserDto updatingUserDto) { var user = _mapper.Map(updatingUserDto); bool isUpdated = await _userRepository.UpdateAsync(user); return isUpdated; } // UPDATE USER ROLE -- die Rolle eines Users aktualisieren public async Task UpdateUserRoleAsync(int userId, int roleId) { var user = await _userRepository.GetByIdAsync(userId); if (user == null) { throw new ArgumentException("User not found"); } var role = await _roleRepository.GetByIdAsync(roleId); if (role == null) { throw new ArgumentException("Role not found"); } user.RoleId = roleId; await _userRepository.SaveAsync(); } // DELETE public async Task DeleteUserAsync(int id) { User? user = await _userRepository.GetByIdAsync(id); if (user is null) return false; bool isDeleted = await _userRepository.DeleteAsync(user); return isDeleted; } } }