diff --git a/rentplace/src/main/java/kattsyn/dev/rentplace/controllers/UserController.java b/rentplace/src/main/java/kattsyn/dev/rentplace/controllers/UserController.java index 1f36f31..634c135 100644 --- a/rentplace/src/main/java/kattsyn/dev/rentplace/controllers/UserController.java +++ b/rentplace/src/main/java/kattsyn/dev/rentplace/controllers/UserController.java @@ -127,7 +127,26 @@ public ResponseEntity updateUserById( @ModelAttribute @Valid UserCreateEditDTO userCreateEditDTO, Authentication authentication) { userService.allowedToEditUser(id, authentication.getName()); - return ResponseEntity.ok(userService.update(id, userCreateEditDTO)); + return ResponseEntity.ok(userService.updateUserById(id, userCreateEditDTO)); + } + + @Operation( + summary = "Изменение данных авторизованного пользователя", + description = "Метод, для того чтобы пользователь изменил данные своего профиля" + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Успешно"), + @ApiResponse(responseCode = "404", description = "Пользователь не найден", content = @Content), + @ApiResponse(responseCode = "422", description = "Ошибка валидации", content = @Content), + @ApiResponse(responseCode = "500", description = "Непредвиденная ошибка со стороны сервера", content = @Content) + }) + @PreAuthorize("hasAuthority('ROLE_ADMIN') or hasAuthority('ROLE_USER')") + @SecurityRequirement(name = "JWT") + @PatchMapping(path = "/me", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity updateUser( + @ModelAttribute @Valid UserCreateEditDTO userCreateEditDTO, + Authentication authentication) { + return ResponseEntity.ok(userService.updateUserByEmail(authentication.getName(), userCreateEditDTO)); } @Operation( diff --git a/rentplace/src/main/java/kattsyn/dev/rentplace/services/UserService.java b/rentplace/src/main/java/kattsyn/dev/rentplace/services/UserService.java index a639933..17c1f42 100644 --- a/rentplace/src/main/java/kattsyn/dev/rentplace/services/UserService.java +++ b/rentplace/src/main/java/kattsyn/dev/rentplace/services/UserService.java @@ -20,15 +20,17 @@ public interface UserService { User getUserById(Long id); - UserDTO save(UserDTO userDTO); - UserDTO createWithImage(UserCreateEditDTO userCreateEditDTO); void deleteById(long id); ImageDTO uploadImage(MultipartFile file, long id); - UserDTO update(long id, UserCreateEditDTO userCreateEditDTO); + UserDTO updateUserById(long id, UserCreateEditDTO userCreateEditDTO); + + UserDTO updateUser(User user, UserCreateEditDTO userCreateEditDTO); + + UserDTO updateUserByEmail(String email, UserCreateEditDTO userCreateEditDTO); boolean allowedToEditUser(long id, String email); diff --git a/rentplace/src/main/java/kattsyn/dev/rentplace/services/impl/UserServiceImpl.java b/rentplace/src/main/java/kattsyn/dev/rentplace/services/impl/UserServiceImpl.java index 098925e..980f0ff 100644 --- a/rentplace/src/main/java/kattsyn/dev/rentplace/services/impl/UserServiceImpl.java +++ b/rentplace/src/main/java/kattsyn/dev/rentplace/services/impl/UserServiceImpl.java @@ -67,16 +67,6 @@ public UserDTO findById(Long id) { return userMapper.fromUser(getUserById(id)); } - @Transactional - @Override - public UserDTO save(UserDTO userDTO) { - User user = userMapper.fromDTO(userDTO); - user.setRegistrationDate(LocalDate.now()); - - user = userRepository.save(user); - return userMapper.fromUser(user); - } - @Transactional @Override public UserDTO createWithImage(UserCreateEditDTO userCreateEditDTO) { @@ -111,35 +101,36 @@ public ImageDTO uploadImage(MultipartFile file, long id) { @Transactional @Override - public UserDTO update(long id, UserCreateEditDTO userCreateEditDTO) { + public UserDTO updateUserByEmail(String email, UserCreateEditDTO userCreateEditDTO) { + User user = userRepository.findByEmail(email).orElseThrow( + () -> new NotFoundException(String.format("User with email %s not found", email)) + ); + + return updateUser(user, userCreateEditDTO); + } + + @Transactional + @Override + public UserDTO updateUserById(long id, UserCreateEditDTO userCreateEditDTO) { User user = getUserById(id); - if (userCreateEditDTO.getName() != null && !userCreateEditDTO.getName().isBlank()) { - user.setName(userCreateEditDTO.getName()); - } - if (userCreateEditDTO.getSurname() != null && !userCreateEditDTO.getSurname().isBlank()) { - user.setSurname(userCreateEditDTO.getSurname()); - } - if (userCreateEditDTO.getEmail() != null && !userCreateEditDTO.getEmail().isBlank()) { - user.setEmail(userCreateEditDTO.getEmail()); - } - if (userCreateEditDTO.getBirthDate() != null) { - user.setBirthDate(userCreateEditDTO.getBirthDate()); - } + return updateUser(user, userCreateEditDTO); + } - if (userCreateEditDTO.getGender() != null) { - user.setGender(userCreateEditDTO.getGender()); - } + @Transactional + @Override + public UserDTO updateUser(User user, UserCreateEditDTO userCreateEditDTO) { - if (userCreateEditDTO.getRole() != null) { - user.setRole(userCreateEditDTO.getRole()); - } + User updatedUser = userMapper.fromUserCreateEditDTO(userCreateEditDTO); + + updatedUser.setUserId(user.getUserId()); + updatedUser.setRegistrationDate(user.getRegistrationDate()); if (userCreateEditDTO.getFile() != null && !userCreateEditDTO.getFile().isEmpty()) { - return uploadImage(userCreateEditDTO.getFile(), user); + return uploadImage(userCreateEditDTO.getFile(), updatedUser); } - return userMapper.fromUser(userRepository.save(user)); + return userMapper.fromUser(userRepository.save(updatedUser)); } @Override