Skip to content

Commit d19cd0b

Browse files
authored
feat:백준ID 삭제 API , test (#355)
1 parent 0fe2c23 commit d19cd0b

File tree

4 files changed

+68
-4
lines changed

4 files changed

+68
-4
lines changed

src/main/java/com/gamzabat/algohub/feature/user/controller/UserController.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ public ResponseEntity<TokenResponse> signIn(@Valid @RequestBody SignInRequest re
7676
return ResponseEntity.ok().body(response);
7777
}
7878

79-
8079
@PostMapping("/auth/verify/send")
8180
@Operation(summary = "이메일 인증 토큰 전송")
8281
public ResponseEntity<Void> sendVerificationCode(@Valid @RequestBody SendVerificationCodeRequest request,
@@ -92,9 +91,9 @@ public ResponseEntity<Void> sendVerificationCode(@Valid @RequestBody SendVerific
9291
@Operation(summary = "이메일 인증 토큰 검증")
9392
public ResponseEntity<Void> verifyEmail(@RequestParam String token) {
9493
userService.checkEmailVerification(token);
95-
return ResponseEntity.ok().build();
94+
return ResponseEntity.ok().build();
9695
}
97-
96+
9897
@GetMapping("/users/check-baekjoon-nickname")
9998
@Operation(summary = "백준 닉네임 유효성 검증 API", description = "회원가입 진행 시, 백준 닉네임이 유효한지 검증하는 API")
10099
public ResponseEntity<Void> checkBjNickname(@RequestParam String bjNickname) {
@@ -103,6 +102,14 @@ public ResponseEntity<Void> checkBjNickname(@RequestParam String bjNickname) {
103102
return ResponseEntity.ok().build();
104103
}
105104

105+
@DeleteMapping("/users/baekjoon-nickname")
106+
@Operation(summary = "백준 닉네임 삭제 API", description = "유저의 백준 id 를 null로 만드는 API")
107+
public ResponseEntity<Void> deleteBjNickname(@AuthedUser User user) {
108+
userService.deleteBjNickname(user);
109+
110+
return ResponseEntity.ok().build();
111+
}
112+
106113
@PostMapping(value = "/auth/reissue-token")
107114
@Operation(summary = "토큰 재발급 API")
108115
public ResponseEntity<TokenResponse> reissueToken(@Valid @RequestBody ReissueTokenRequest request,

src/main/java/com/gamzabat/algohub/feature/user/service/UserService.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,16 @@ public void checkBjNickname(String bjNickname) {
206206
log.info("success to check baekjoon nickname validity nickname = {}", bjNickname);
207207
}
208208

209+
@Transactional
210+
public void deleteBjNickname(User user) {
211+
if (user.getBjNickname() == null) {
212+
throw new CheckBjNicknameValidationException(HttpStatus.BAD_REQUEST.value(), "백준 아이디가 등록되어 있지 않습니다.");
213+
}
214+
user.editBjNickname(null);
215+
userRepository.save(user);
216+
log.info("succes to delete user baekjoon nickname user_id = {}", user.getId());
217+
}
218+
209219
@Transactional(readOnly = true)
210220
public void checkEmailDuplication(String email) {
211221
if (userRepository.existsByEmail(email))
@@ -359,7 +369,7 @@ public void checkEmailVerification(String token) {
359369
redisService.deleteValues(token);
360370
redisService.setValues(token, email, Duration.ofMinutes(30));
361371
}
362-
372+
363373
private void validateBjNickname(String bjNickname) {
364374

365375
String bjUserUrl = BOJ_USER_PROFILE_URL + bjNickname;

src/test/java/com/gamzabat/algohub/feature/user/controller/UserControllerTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,4 +533,30 @@ void checkNickname_3() throws Exception {
533533
.andExpect(jsonPath("$.error").value("이미 사용 중인 닉네임입니다."));
534534
verify(userService, times(1)).checkNickname(nickname);
535535
}
536+
537+
@Test
538+
@DisplayName("백준 닉네임 삭제 성공")
539+
void deleteBjNickname() throws Exception {
540+
//given
541+
User user = User.builder().bjNickname("bjNickname").build();
542+
doNothing().when(userService).deleteBjNickname(any(User.class));
543+
//when, then
544+
mockMvc.perform(delete("/api/users/baekjoon-nickname")
545+
.header("Authorization", token))
546+
.andExpect(status().isOk());
547+
verify(userService, times(1)).deleteBjNickname(any(User.class));
548+
}
549+
550+
@Test
551+
@DisplayName("백준 닉네임 삭제 실패 : 백준 아이디 등록이 되어있지 않음")
552+
void deleteBjNickname_2() throws Exception {
553+
//given
554+
doThrow(new CheckBjNicknameValidationException(HttpStatus.BAD_REQUEST.value(), "백준 아이디가 등록되어 있지 않습니다."))
555+
.when(userService).deleteBjNickname(any(User.class));
556+
//when,then
557+
mockMvc.perform(delete("/api/users/baekjoon-nickname")
558+
.header("Authorization", token))
559+
.andExpect(status().isBadRequest())
560+
.andExpect(jsonPath("$.error").value("백준 아이디가 등록되어 있지 않습니다."));
561+
}
536562
}

src/test/java/com/gamzabat/algohub/feature/user/service/UserServiceTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,4 +648,25 @@ void checkEmailVerification_success() {
648648
verify(redisService).checkExistsValue(EMAIL_VERIFICATION_TOKEN);
649649
}
650650

651+
@Test
652+
@DisplayName("백준 닉네임 삭제 성공")
653+
void deleteBjNickname_success() {
654+
//when
655+
userService.deleteBjNickname(user);
656+
657+
//then
658+
assertThat(user.getBjNickname()).isEqualTo(null);
659+
}
660+
661+
@Test
662+
@DisplayName("백준 닉네임 삭제 실패 : 등록 되지 않은 백준 닉네임")
663+
void deleteBjNickname_failed() {
664+
//given
665+
User user1 = User.builder().bjNickname(null).build();
666+
//then
667+
assertThatThrownBy(() -> userService.deleteBjNickname(user1))
668+
.isInstanceOf(CheckBjNicknameValidationException.class)
669+
.hasFieldOrPropertyWithValue("code", HttpStatus.BAD_REQUEST.value())
670+
.hasFieldOrPropertyWithValue("error", "백준 아이디가 등록되어 있지 않습니다.");
671+
}
651672
}

0 commit comments

Comments
 (0)