From 1046f352ab6304e8f59ebc852437fc176a0ea699 Mon Sep 17 00:00:00 2001 From: Art Date: Tue, 28 Sep 2021 14:37:01 +0300 Subject: [PATCH] 27.3.1. Modified endpoint `update user` - use userId instead of current username - backend (#27) --- .../backend/controller/UserResource.java | 6 ++--- .../backend/service/UserService.java | 4 +++- .../backend/service/UserServiceImpl.java | 19 ++++++++++----- .../backend/controller/UserResourceTest.java | 3 ++- .../controller/UserResourceUnSecureTest.java | 23 +++++++++++-------- 5 files changed, 34 insertions(+), 21 deletions(-) diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java index eb2cd5d..e4bde1a 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java @@ -65,10 +65,10 @@ public class UserResource { return userService.addNewUser(userDto); } - @PutMapping("{currentUsername}") - public User updateUser(@PathVariable String currentUsername, @Valid UserDto userDto) { + @PutMapping("{userId}") + public User updateUser(@PathVariable UUID userId, @Valid UserDto userDto) { log.debug("User DTO: {}", userDto); - return userService.updateUser(currentUsername, userDto); + return userService.updateUser(userId, userDto); } @GetMapping("{username}") diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java index be3a0e3..f88f36f 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java @@ -20,9 +20,11 @@ public interface UserService extends UserDetailsService { User findByEmail(String email); + User findByUserId(UUID userId); + User addNewUser(UserDto userDto); - User updateUser(String username, UserDto userDto); + User updateUser(UUID userId, UserDto userDto); void deleteUser(UUID userId); diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java index 0edf303..18a6abf 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java @@ -145,6 +145,13 @@ public class UserServiceImpl implements UserService { .orElseThrow(() -> new EmailNotFoundException(String.format(EMAIL_NOT_FOUND_MSG, email))); } + @Override + public User findByUserId(UUID userId) { + return userRepository + .findByUserId(userId) + .orElseThrow(() -> new UserNotFoundException(USER_NOT_FOUND_MSG)); + } + @Override public User addNewUser(UserDto userDto) { @@ -210,12 +217,12 @@ public class UserServiceImpl implements UserService { } @Override - public User updateUser(String username, UserDto userDto) { + public User updateUser(UUID userId, UserDto userDto) { String newUsername = userDto.getUsername(); String email = userDto.getEmail(); - User user = validateUpdateUsernameAndEmail(username, newUsername, email); + User user = validateUpdateUsernameAndEmail(userId, newUsername, email); user.setFirstName(userDto.getFirstName()); user.setLastName(userDto.getLastName()); @@ -303,13 +310,13 @@ public class UserServiceImpl implements UserService { throwEmailExistsException(email); } - private User validateUpdateUsernameAndEmail(String currentUsername, String username, String email) { + private User validateUpdateUsernameAndEmail(UUID userId, String username, String email) { - Objects.requireNonNull(currentUsername); + Objects.requireNonNull(userId); - User currentUser = findByUsername(currentUsername); + User currentUser = findByUserId(userId); - if (!Objects.equals(currentUsername, username) && userRepository.existsByUsername(username)) + if (!Objects.equals(currentUser.getUsername(), username) && userRepository.existsByUsername(username)) throwUsernameExistsException(username); if (!Objects.equals(currentUser.getEmail(), email) && userRepository.existsByEmail(email)) diff --git a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceTest.java b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceTest.java index e5c5f33..0f8a660 100644 --- a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceTest.java +++ b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceTest.java @@ -590,6 +590,7 @@ class UserResourceTest extends BaseUserTest { User user = createRandomUser(); userRepository.save(user); String currentUsername = user.getUsername(); + UUID userId = user.getUserId(); UserDto userDto = createRandomUserDto(); @@ -610,7 +611,7 @@ class UserResourceTest extends BaseUserTest { //when var requestEntity = RequestEntity - .put("/user/{currentUsername}", currentUsername) + .put("/user/{userId}", userId) .contentType(MediaType.MULTIPART_FORM_DATA) .headers(httpHeaders -> httpHeaders.setBearerAuth(correctToken)) .body(body); diff --git a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java index c563ff8..e9929bc 100644 --- a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java +++ b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java @@ -258,11 +258,12 @@ class UserResourceUnSecureTest extends BaseUserTest { //given UserDto userDto = createRandomUserDto(); String currentUsername = user.getUsername(); + UUID userId = user.getUserId(); userDto.setUsername(currentUsername); userDto.setRole(Role.ROLE_MANAGER); Map paramMap = Map.of( - "currentUsername", currentUsername, + "userId", userId, "firstName", userDto.getFirstName(), "lastName", userDto.getLastName(), "username", userDto.getUsername(), @@ -275,7 +276,7 @@ class UserResourceUnSecureTest extends BaseUserTest { //when ResponseEntity responseEntity = restTemplate .exchange( - "/user/{currentUsername}?username={username}&email={email}" + + "/user/{userId}?username={username}&email={email}" + "&firstName={firstName}&lastName={lastName}" + "&role={role}&active={isActive}¬Locked={isNotLocked}", HttpMethod.PUT, @@ -304,12 +305,12 @@ class UserResourceUnSecureTest extends BaseUserTest { //given UserDto userDto = createRandomUserDto(); - String currentUsername = user.getUsername(); + UUID userId = user.getUserId(); userDto.setRole(Role.ROLE_HR); Map paramMap = Map.of( - "currentUsername", currentUsername, + "userId", userId, "firstName", userDto.getFirstName(), "lastName", userDto.getLastName(), "username", userDto.getUsername(), @@ -322,7 +323,7 @@ class UserResourceUnSecureTest extends BaseUserTest { //when ResponseEntity responseEntity = restTemplate .exchange( - "/user/{currentUsername}?username={username}&email={email}" + + "/user/{userId}?username={username}&email={email}" + "&firstName={firstName}&lastName={lastName}" + "&role={role}&active={isActive}¬Locked={isNotLocked}", HttpMethod.PUT, @@ -353,11 +354,12 @@ class UserResourceUnSecureTest extends BaseUserTest { //given UserDto userDto = createRandomUserDto(); String currentUsername = user.getUsername(); + UUID userId = user.getUserId(); userDto.setRole(Role.ROLE_USER); Map paramMap = Map.of( - "currentUsername", currentUsername, + "userId", userId, "firstName", userDto.getFirstName(), "username", userDto.getUsername(), "email", userDto.getEmail(), @@ -369,7 +371,7 @@ class UserResourceUnSecureTest extends BaseUserTest { //when var responseEntity = restTemplate .exchange( - "/user/{currentUsername}?username={username}&email={email}" + + "/user/{userId}?username={username}&email={email}" + "&firstName={firstName}" + "&role={role}&active={isActive}¬Locked={isNotLocked}", HttpMethod.PUT, @@ -394,11 +396,12 @@ class UserResourceUnSecureTest extends BaseUserTest { //given UserDto userDto = createRandomUserDto(); String currentUsername = FAKER.name().username(); + UUID userId = UUID.randomUUID(); userDto.setUsername(currentUsername); userDto.setRole(Role.ROLE_MANAGER); Map paramMap = Map.of( - "currentUsername", currentUsername, + "userId", userId, "firstName", userDto.getFirstName(), "lastName", userDto.getLastName(), "username", userDto.getUsername(), @@ -411,7 +414,7 @@ class UserResourceUnSecureTest extends BaseUserTest { //when var responseEntity = restTemplate .exchange( - "/user/{currentUsername}?username={username}&email={email}" + + "/user/{userId}?username={username}&email={email}" + "&firstName={firstName}&lastName={lastName}" + "&role={role}&active={isActive}¬Locked={isNotLocked}", HttpMethod.PUT, @@ -427,7 +430,7 @@ class UserResourceUnSecureTest extends BaseUserTest { .isNotNull() .hasNoNullFieldsOrProperties() .hasFieldOrPropertyWithValue("httpStatus", BAD_REQUEST) - .hasFieldOrPropertyWithValue("message", String.format("User with username `%s` not found", currentUsername)); + .hasFieldOrPropertyWithValue("message", "User not found"); } }