Skip to content

사용 가능한 닉네임 확인 API 구현 및 테스트 #22

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions boot/api/src/main/java/com/clip/api/docs/user/UserAccountDocs.java
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,26 @@ void updateName(@RequestBody UpdateNameDto updateNameDto,
void updateNickname(@RequestBody UpdateNicknameDto updateNicknameDto,
@AuthenticationPrincipal UserDetails userDetails);

@Operation(
summary = "사용 가능한 닉네임 확인 API",
description = """
해당 닉네임이 사용 가능한지 확인합니다.
다른 유저가 사용중인 닉네임일 경우 HTTP 400 Bad Request를 반환합니다.
"""
)
@ApiResponses(value = {
@ApiResponse(
responseCode = "200",
description = "사용 가능한 닉네임"
),
@ApiResponse(
responseCode = "400",
description = "사용 불가능한 닉네임"
)
})
@PostMapping("/nickname/available")
void checkNicknameAvailable(@RequestBody UpdateNicknameDto updateNicknameDto);

@Operation(
summary = "유저 상세 정보 업데이트 API",
description = """
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ public void updateNickname(UpdateNicknameDto updateNicknameDto,
userAccountService.updateNickname(Long.parseLong(userDetails.getUsername()), updateNicknameDto.getNickname());
}

@Override
public void checkNicknameAvailable(UpdateNicknameDto updateNicknameDto) {
userAccountService.checkNicknameAvailable(updateNicknameDto.getNickname());
}

@Override
public void updateUserDetailInfo(UpdateUserDetailInfoDto updateUserDetailInfoDto, UserDetails userDetails) {
userAccountService.updateUserDetailInfo(Long.parseLong(userDetails.getUsername()), updateUserDetailInfoDto);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.clip.api.user.controller.dto.LoginDto;
import com.clip.api.user.controller.dto.SignupDto;
import com.clip.api.user.controller.dto.UpdateNicknameDto;
import com.clip.api.user.controller.dto.UpdateUserDetailInfoDto;
import com.clip.api.user.controller.dto.UserInfoDto;
import com.clip.api.user.exception.NotFoundUserException;
Expand All @@ -11,6 +10,7 @@
import com.clip.auth.service.TokenService;
import com.clip.global.config.jwt.TokenProvider;
import com.clip.user.entity.User;
import com.clip.user.exception.NicknameAlreadyExistsException;
import com.clip.user.service.TermsAcceptanceService;
import com.clip.user.service.UserService;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -92,4 +92,10 @@ public UserInfoDto getUserInfo(String phoneNumber) {
.platform(user.getPlatform())
.build();
}

public void checkNicknameAvailable(String nickname) {
if (userService.isExistNickname(nickname)) {
throw new NicknameAlreadyExistsException();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -322,4 +322,16 @@ void updateUserDetailInfo() {
gender
);
}

@DisplayName("사용중인 닉네임이면 NicknameAlreadyExistsException이 발생한다.")
@Test
void checkNicknameAvailable() {
//given
String nickname = "닉네임";
userService.save(User.builder().nickname(nickname).build());

//when & then
assertThatThrownBy(() -> userAccountService.checkNicknameAvailable(nickname))
.isInstanceOf(NicknameAlreadyExistsException.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -164,4 +164,18 @@ void findUser() {
//then
assertThat(foundUser).isEqualTo(user);
}

@DisplayName("nickname이 존재하는지 확인한다.")
@Test
void existsByNickname() {
//given
String nickname = "닉네임";
userRepository.save(User.builder().nickname(nickname).build());

//when
boolean exists = userRepository.existsByNickname(nickname);

//then
assertThat(exists).isTrue();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,6 @@ void updateUserDetailInfo(

@Query("select u from User u where u.phoneNumber = :phoneNumber")
Optional<User> findUser(@Param("phoneNumber") String phoneNumber);

boolean existsByNickname(String nickname);
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,8 @@ public User findUser(String phoneNumber) {
return userRepository.findUser(phoneNumber)
.orElseThrow(UserNotFoundException::new);
}

public boolean isExistNickname(String nickname) {
return userRepository.existsByNickname(nickname);
}
}