27.3.1. Modified endpoint update user - use userId instead of current username - backend (#27)

This commit is contained in:
Art
2021-09-28 14:37:01 +03:00
parent 76cd81a731
commit 1046f352ab
5 changed files with 34 additions and 21 deletions

View File

@ -65,10 +65,10 @@ public class UserResource {
return userService.addNewUser(userDto); return userService.addNewUser(userDto);
} }
@PutMapping("{currentUsername}") @PutMapping("{userId}")
public User updateUser(@PathVariable String currentUsername, @Valid UserDto userDto) { public User updateUser(@PathVariable UUID userId, @Valid UserDto userDto) {
log.debug("User DTO: {}", userDto); log.debug("User DTO: {}", userDto);
return userService.updateUser(currentUsername, userDto); return userService.updateUser(userId, userDto);
} }
@GetMapping("{username}") @GetMapping("{username}")

View File

@ -20,9 +20,11 @@ public interface UserService extends UserDetailsService {
User findByEmail(String email); User findByEmail(String email);
User findByUserId(UUID userId);
User addNewUser(UserDto userDto); User addNewUser(UserDto userDto);
User updateUser(String username, UserDto userDto); User updateUser(UUID userId, UserDto userDto);
void deleteUser(UUID userId); void deleteUser(UUID userId);

View File

@ -145,6 +145,13 @@ public class UserServiceImpl implements UserService {
.orElseThrow(() -> new EmailNotFoundException(String.format(EMAIL_NOT_FOUND_MSG, email))); .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 @Override
public User addNewUser(UserDto userDto) { public User addNewUser(UserDto userDto) {
@ -210,12 +217,12 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
public User updateUser(String username, UserDto userDto) { public User updateUser(UUID userId, UserDto userDto) {
String newUsername = userDto.getUsername(); String newUsername = userDto.getUsername();
String email = userDto.getEmail(); String email = userDto.getEmail();
User user = validateUpdateUsernameAndEmail(username, newUsername, email); User user = validateUpdateUsernameAndEmail(userId, newUsername, email);
user.setFirstName(userDto.getFirstName()); user.setFirstName(userDto.getFirstName());
user.setLastName(userDto.getLastName()); user.setLastName(userDto.getLastName());
@ -303,13 +310,13 @@ public class UserServiceImpl implements UserService {
throwEmailExistsException(email); 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); throwUsernameExistsException(username);
if (!Objects.equals(currentUser.getEmail(), email) && userRepository.existsByEmail(email)) if (!Objects.equals(currentUser.getEmail(), email) && userRepository.existsByEmail(email))

View File

@ -590,6 +590,7 @@ class UserResourceTest extends BaseUserTest {
User user = createRandomUser(); User user = createRandomUser();
userRepository.save(user); userRepository.save(user);
String currentUsername = user.getUsername(); String currentUsername = user.getUsername();
UUID userId = user.getUserId();
UserDto userDto = createRandomUserDto(); UserDto userDto = createRandomUserDto();
@ -610,7 +611,7 @@ class UserResourceTest extends BaseUserTest {
//when //when
var requestEntity = RequestEntity var requestEntity = RequestEntity
.put("/user/{currentUsername}", currentUsername) .put("/user/{userId}", userId)
.contentType(MediaType.MULTIPART_FORM_DATA) .contentType(MediaType.MULTIPART_FORM_DATA)
.headers(httpHeaders -> httpHeaders.setBearerAuth(correctToken)) .headers(httpHeaders -> httpHeaders.setBearerAuth(correctToken))
.body(body); .body(body);

View File

@ -258,11 +258,12 @@ class UserResourceUnSecureTest extends BaseUserTest {
//given //given
UserDto userDto = createRandomUserDto(); UserDto userDto = createRandomUserDto();
String currentUsername = user.getUsername(); String currentUsername = user.getUsername();
UUID userId = user.getUserId();
userDto.setUsername(currentUsername); userDto.setUsername(currentUsername);
userDto.setRole(Role.ROLE_MANAGER); userDto.setRole(Role.ROLE_MANAGER);
Map<String, ?> paramMap = Map.of( Map<String, ?> paramMap = Map.of(
"currentUsername", currentUsername, "userId", userId,
"firstName", userDto.getFirstName(), "firstName", userDto.getFirstName(),
"lastName", userDto.getLastName(), "lastName", userDto.getLastName(),
"username", userDto.getUsername(), "username", userDto.getUsername(),
@ -275,7 +276,7 @@ class UserResourceUnSecureTest extends BaseUserTest {
//when //when
ResponseEntity<User> responseEntity = restTemplate ResponseEntity<User> responseEntity = restTemplate
.exchange( .exchange(
"/user/{currentUsername}?username={username}&email={email}" + "/user/{userId}?username={username}&email={email}" +
"&firstName={firstName}&lastName={lastName}" + "&firstName={firstName}&lastName={lastName}" +
"&role={role}&active={isActive}&notLocked={isNotLocked}", "&role={role}&active={isActive}&notLocked={isNotLocked}",
HttpMethod.PUT, HttpMethod.PUT,
@ -304,12 +305,12 @@ class UserResourceUnSecureTest extends BaseUserTest {
//given //given
UserDto userDto = createRandomUserDto(); UserDto userDto = createRandomUserDto();
String currentUsername = user.getUsername(); UUID userId = user.getUserId();
userDto.setRole(Role.ROLE_HR); userDto.setRole(Role.ROLE_HR);
Map<String, ?> paramMap = Map.of( Map<String, ?> paramMap = Map.of(
"currentUsername", currentUsername, "userId", userId,
"firstName", userDto.getFirstName(), "firstName", userDto.getFirstName(),
"lastName", userDto.getLastName(), "lastName", userDto.getLastName(),
"username", userDto.getUsername(), "username", userDto.getUsername(),
@ -322,7 +323,7 @@ class UserResourceUnSecureTest extends BaseUserTest {
//when //when
ResponseEntity<User> responseEntity = restTemplate ResponseEntity<User> responseEntity = restTemplate
.exchange( .exchange(
"/user/{currentUsername}?username={username}&email={email}" + "/user/{userId}?username={username}&email={email}" +
"&firstName={firstName}&lastName={lastName}" + "&firstName={firstName}&lastName={lastName}" +
"&role={role}&active={isActive}&notLocked={isNotLocked}", "&role={role}&active={isActive}&notLocked={isNotLocked}",
HttpMethod.PUT, HttpMethod.PUT,
@ -353,11 +354,12 @@ class UserResourceUnSecureTest extends BaseUserTest {
//given //given
UserDto userDto = createRandomUserDto(); UserDto userDto = createRandomUserDto();
String currentUsername = user.getUsername(); String currentUsername = user.getUsername();
UUID userId = user.getUserId();
userDto.setRole(Role.ROLE_USER); userDto.setRole(Role.ROLE_USER);
Map<String, ?> paramMap = Map.of( Map<String, ?> paramMap = Map.of(
"currentUsername", currentUsername, "userId", userId,
"firstName", userDto.getFirstName(), "firstName", userDto.getFirstName(),
"username", userDto.getUsername(), "username", userDto.getUsername(),
"email", userDto.getEmail(), "email", userDto.getEmail(),
@ -369,7 +371,7 @@ class UserResourceUnSecureTest extends BaseUserTest {
//when //when
var responseEntity = restTemplate var responseEntity = restTemplate
.exchange( .exchange(
"/user/{currentUsername}?username={username}&email={email}" + "/user/{userId}?username={username}&email={email}" +
"&firstName={firstName}" + "&firstName={firstName}" +
"&role={role}&active={isActive}&notLocked={isNotLocked}", "&role={role}&active={isActive}&notLocked={isNotLocked}",
HttpMethod.PUT, HttpMethod.PUT,
@ -394,11 +396,12 @@ class UserResourceUnSecureTest extends BaseUserTest {
//given //given
UserDto userDto = createRandomUserDto(); UserDto userDto = createRandomUserDto();
String currentUsername = FAKER.name().username(); String currentUsername = FAKER.name().username();
UUID userId = UUID.randomUUID();
userDto.setUsername(currentUsername); userDto.setUsername(currentUsername);
userDto.setRole(Role.ROLE_MANAGER); userDto.setRole(Role.ROLE_MANAGER);
Map<String, ?> paramMap = Map.of( Map<String, ?> paramMap = Map.of(
"currentUsername", currentUsername, "userId", userId,
"firstName", userDto.getFirstName(), "firstName", userDto.getFirstName(),
"lastName", userDto.getLastName(), "lastName", userDto.getLastName(),
"username", userDto.getUsername(), "username", userDto.getUsername(),
@ -411,7 +414,7 @@ class UserResourceUnSecureTest extends BaseUserTest {
//when //when
var responseEntity = restTemplate var responseEntity = restTemplate
.exchange( .exchange(
"/user/{currentUsername}?username={username}&email={email}" + "/user/{userId}?username={username}&email={email}" +
"&firstName={firstName}&lastName={lastName}" + "&firstName={firstName}&lastName={lastName}" +
"&role={role}&active={isActive}&notLocked={isNotLocked}", "&role={role}&active={isActive}&notLocked={isNotLocked}",
HttpMethod.PUT, HttpMethod.PUT,
@ -427,7 +430,7 @@ class UserResourceUnSecureTest extends BaseUserTest {
.isNotNull() .isNotNull()
.hasNoNullFieldsOrProperties() .hasNoNullFieldsOrProperties()
.hasFieldOrPropertyWithValue("httpStatus", BAD_REQUEST) .hasFieldOrPropertyWithValue("httpStatus", BAD_REQUEST)
.hasFieldOrPropertyWithValue("message", String.format("User with username `%s` not found", currentUsername)); .hasFieldOrPropertyWithValue("message", "User not found");
} }
} }