@@ -0,0 +1,98 @@
|
||||
package ru.soune.nocopy.service.user;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import ru.soune.nocopy.dto.register.ChangePasswordRequest;
|
||||
import ru.soune.nocopy.dto.user.UserDTO;
|
||||
import ru.soune.nocopy.dto.user.UserRequest;
|
||||
import ru.soune.nocopy.entity.user.User;
|
||||
import ru.soune.nocopy.exception.InvalidUserEmail;
|
||||
import ru.soune.nocopy.exception.NotValidationPasswordException;
|
||||
import ru.soune.nocopy.exception.UserNotFoundException;
|
||||
import ru.soune.nocopy.repository.UserRepository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class UserService {
|
||||
|
||||
private final UserRepository userRepository;
|
||||
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
|
||||
@Transactional
|
||||
public User changePassword(User user, ChangePasswordRequest request) {
|
||||
if (!passwordEncoder.matches(request.getCurrentPassword(), user.getPassword())) {
|
||||
throw new NotValidationPasswordException("Current password is incorrect");
|
||||
}
|
||||
|
||||
user.setPassword(passwordEncoder.encode(request.getNewPassword()));
|
||||
|
||||
return userRepository.save(user);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public UserDTO updateUser(UserRequest userRequest, User currentUser) {
|
||||
User user = userRepository.findById(currentUser.getId())
|
||||
.orElseThrow(() -> new UserNotFoundException("User not found with id: " + currentUser.getId()));
|
||||
|
||||
updateUserFromRequest(user, userRequest);
|
||||
|
||||
User updatedUser = userRepository.save(user);
|
||||
|
||||
return mapToDTO(updatedUser);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void activateAndVerifyUser(long userId) {
|
||||
Optional<User> users = userRepository.findById(userId);
|
||||
User user = users.orElseThrow(() -> new UserNotFoundException("User not found with id: " + userId));
|
||||
user.setIsActive(true);
|
||||
user.setEmailVerified(true);
|
||||
|
||||
userRepository.save(user);
|
||||
}
|
||||
|
||||
private void updateUserFromRequest(User user, UserRequest request) {
|
||||
if (request.getFullName() != null) {
|
||||
user.setFullName(request.getFullName());
|
||||
}
|
||||
|
||||
if (request.getCompany() != null) {
|
||||
user.setCompany(request.getCompany());
|
||||
}
|
||||
|
||||
if (request.getEmail() != null && !request.getEmail().equals(user.getEmail())) {
|
||||
if (userRepository.existsByEmail(request.getEmail())) {
|
||||
throw new InvalidUserEmail("Email already exists: " + request.getEmail());
|
||||
}
|
||||
user.setEmail(request.getEmail());
|
||||
}
|
||||
|
||||
if (request.getPhone() != null) {
|
||||
user.setPhone(request.getPhone());
|
||||
}
|
||||
if (request.getGenderType() != null) {
|
||||
user.setGenderType(request.getGenderType());
|
||||
}
|
||||
if (request.getBirthday() != null) {
|
||||
user.setBirthday(request.getBirthday());
|
||||
}
|
||||
}
|
||||
|
||||
private UserDTO mapToDTO(User user) {
|
||||
return UserDTO.builder()
|
||||
.fullName(user.getFullName())
|
||||
.email(user.getEmail())
|
||||
.company(user.getCompany())
|
||||
.phone(user.getPhone())
|
||||
.genderType(user.getGenderType())
|
||||
.birthday(user.getBirthday())
|
||||
.subscriptionType(user.getSubscriptionType())
|
||||
.createdAt(user.getCreatedAt())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user