using AutoMapper; using Project.Application.DTOs.Incoming; using Project.Application.DTOs.Outgoing; using Project.Application.Interfaces; using Project.Domain.Entities; using Project.Infrastructure.Interfaces; namespace Project.Application.Services { public class UserService : IUserService { // FIELDS FOR CTOR private readonly IUserRepository _userRepository; private readonly IRoleRepository _roleRepository; private readonly IMapper _mapper; // CTOR 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 EMAIL public async Task GetByEmailAsync(string email) { var user = await _userRepository.GetByEmailAsync(email); 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; } } }