NCP-3 Add logic update user fields,change password

This commit is contained in:
vladp
2025-11-27 12:48:08 +07:00
parent ffb1d811a8
commit 5c8fdce323
10 changed files with 180 additions and 11 deletions
@@ -3,9 +3,14 @@ package ru.soune.no_copy.service;
import lombok.AllArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ru.soune.no_copy.dto.ChangePasswordRequest;
import ru.soune.no_copy.dto.UserDTO;
import ru.soune.no_copy.dto.UserRequest;
import ru.soune.no_copy.entity.User;
import ru.soune.no_copy.exception.InvalidUserEmail;
import ru.soune.no_copy.exception.NotValidationPasswordException;
import ru.soune.no_copy.exception.UserNotFoundException;
import ru.soune.no_copy.repository.UserRepository;
@Service
@@ -16,6 +21,7 @@ public class UserService {
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");
@@ -25,4 +31,56 @@ public class UserService {
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);
}
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();
}
}