src/main/java/hexlet/code/service/UserService.java
package hexlet.code.service;
import hexlet.code.dto.UserDTO;
import hexlet.code.mapper.UserMapper;
import hexlet.code.model.User;
import hexlet.code.repository.UserRepository;
import hexlet.code.util.UserUtils;
import org.apache.commons.lang3.NotImplementedException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.UserDetailsManager;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public final class UserService implements UserDetailsManager {
@Autowired
private UserMapper userMapper;
@Autowired
private UserRepository userRepository;
@Autowired
private UserUtils userUtils;
@Autowired
private PasswordEncoder passwordEncoder;
public List<UserDTO> getAll() {
var users = userRepository.findAll();
return users.stream()
.map(userMapper::map)
.toList();
}
public UserDTO findById(Long id) {
var user = userRepository.findById(id).orElseThrow();
return userMapper.map(user);
}
public UserDTO create(UserDTO data) {
var user = userMapper.map(data);
var passwordDigest = passwordEncoder.encode(data.getPassword());
user.setPasswordDigest(passwordDigest);
userRepository.save(user);
return userMapper.map(user);
}
public UserDTO update(UserDTO data, Long id) {
var user = userRepository.findById(id).orElseThrow();
userMapper.update(data, user);
if (data.getPassword() != null) {
var passwordDigest = passwordEncoder.encode(data.getPassword());
user.setPasswordDigest(passwordDigest);
}
userRepository.save(user);
return userMapper.map(user);
}
public void delete(Long id) {
userRepository.deleteById(id);
}
@Override
public UserDetails loadUserByUsername(String email) {
return userRepository.findByEmail(email)
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
}
@Override
public void createUser(UserDetails userData) {
var user = new User();
user.setEmail(userData.getUsername());
var hashedPassword = passwordEncoder.encode(userData.getPassword());
user.setPasswordDigest(hashedPassword);
userRepository.save(user);
}
@Override
public void updateUser(UserDetails user) {
throw new NotImplementedException("Unimplemented method 'updateUser'");
}
@Override
public void deleteUser(String username) {
throw new NotImplementedException("Unimplemented method 'deleteUser'");
}
@Override
public void changePassword(String oldPassword, String newPassword) {
throw new NotImplementedException("Unimplemented method 'changePassword'");
}
@Override
public boolean userExists(String username) {
throw new NotImplementedException("Unimplemented method 'userExists'");
}
}