From 37d1406bd29e79ebd884693b30de474485742608 Mon Sep 17 00:00:00 2001 From: dev-Crayon Date: Wed, 31 Jan 2024 11:49:57 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]:=20=EB=8B=89=EB=84=A4=EC=9E=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 닉네임 변경 관련 로직 구현 SuccessCode 추가 Related to: #54 --- .../auth/application/UserService.java | 15 +++++++++++++ .../io/sobok/SobokSobok/auth/domain/User.java | 4 ++++ .../SobokSobok/auth/ui/UserController.java | 21 +++++++++++++++++++ .../auth/ui/dto/UsernameRequest.java | 10 +++++++++ .../SobokSobok/exception/SuccessCode.java | 1 + 5 files changed, 51 insertions(+) create mode 100644 src/main/java/io/sobok/SobokSobok/auth/ui/dto/UsernameRequest.java diff --git a/src/main/java/io/sobok/SobokSobok/auth/application/UserService.java b/src/main/java/io/sobok/SobokSobok/auth/application/UserService.java index c7e9362..375af2b 100644 --- a/src/main/java/io/sobok/SobokSobok/auth/application/UserService.java +++ b/src/main/java/io/sobok/SobokSobok/auth/application/UserService.java @@ -7,6 +7,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; + +import io.sobok.SobokSobok.exception.ErrorCode; +import io.sobok.SobokSobok.exception.model.ConflictException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -42,4 +45,16 @@ public List getUsername(Long userId, String username) { return result; } + + @Transactional + public void changeUsername(Long userId, String username) { + + User user = UserServiceUtil.findUserById(userRepository, userId); + + if (duplicateNickname(username)) { + throw new ConflictException(ErrorCode.ALREADY_USING_USERNAME); + } + + user.changeUsername(username); + } } diff --git a/src/main/java/io/sobok/SobokSobok/auth/domain/User.java b/src/main/java/io/sobok/SobokSobok/auth/domain/User.java index 9bff590..17e5ced 100644 --- a/src/main/java/io/sobok/SobokSobok/auth/domain/User.java +++ b/src/main/java/io/sobok/SobokSobok/auth/domain/User.java @@ -58,6 +58,10 @@ public void updateDeviceToken(String newDeviceToken) { this.deviceToken = newDeviceToken; } + public void changeUsername(String username) { + this.username = username; + } + public void deleteUser() { this.deviceToken = ""; this.username = ""; diff --git a/src/main/java/io/sobok/SobokSobok/auth/ui/UserController.java b/src/main/java/io/sobok/SobokSobok/auth/ui/UserController.java index 39233d2..8e8ddd0 100644 --- a/src/main/java/io/sobok/SobokSobok/auth/ui/UserController.java +++ b/src/main/java/io/sobok/SobokSobok/auth/ui/UserController.java @@ -2,12 +2,15 @@ import io.sobok.SobokSobok.auth.application.UserService; import io.sobok.SobokSobok.auth.domain.User; +import io.sobok.SobokSobok.auth.ui.dto.UsernameRequest; import io.sobok.SobokSobok.auth.ui.dto.UsernameResponse; import io.sobok.SobokSobok.common.dto.ApiResponse; import io.sobok.SobokSobok.exception.SuccessCode; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import java.util.List; + +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -53,4 +56,22 @@ public ResponseEntity>> getUsername( userService.getUsername(user.getId(), username) )); } + + @PutMapping("/nickname") + @Operation( + summary = "유저 닉네임 변경 API 메서드", + description = "유저 본인의 닉네임을 변경하는 메서드입니다." + ) + public ResponseEntity> changeUsername( + @AuthenticationPrincipal User user, + @RequestBody @Valid final UsernameRequest request + ) { + + userService.changeUsername(user.getId(), request.username()); + return ResponseEntity + .status(HttpStatus.OK) + .body(ApiResponse.success( + SuccessCode.CHANGE_NICKNAME_SUCCESS + )); + } } diff --git a/src/main/java/io/sobok/SobokSobok/auth/ui/dto/UsernameRequest.java b/src/main/java/io/sobok/SobokSobok/auth/ui/dto/UsernameRequest.java new file mode 100644 index 0000000..44c05e4 --- /dev/null +++ b/src/main/java/io/sobok/SobokSobok/auth/ui/dto/UsernameRequest.java @@ -0,0 +1,10 @@ +package io.sobok.SobokSobok.auth.ui.dto; + +import jakarta.validation.constraints.NotBlank; + +public record UsernameRequest( + + @NotBlank + String username +) { +} diff --git a/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java b/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java index 44d1f9a..a518ee5 100644 --- a/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java +++ b/src/main/java/io/sobok/SobokSobok/exception/SuccessCode.java @@ -17,6 +17,7 @@ public enum SuccessCode { // user NICKNAME_CHECK_SUCCESS(HttpStatus.OK, "닉네임 중복 확인에 성공했습니다."), + CHANGE_NICKNAME_SUCCESS(HttpStatus.OK, "닉네임 변경에 성공했습니다."), GET_USERNAME_SUCCESS(HttpStatus.OK, "유저 이름 조회에 성공했습니다."), // pill