From f24d74b19f637dc4b190bb0fbff30bd871220e9a Mon Sep 17 00:00:00 2001 From: kwonyonghoon Date: Mon, 28 Apr 2025 17:25:08 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9C=A0=EC=A0=80=20=EB=93=B1=EB=A1=9D=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95(=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=EB=90=9C=20=EC=A0=84=ED=99=94=EB=B2=88=ED=98=B8=EA=B0=80=20?= =?UTF-8?q?=EC=9E=88=EB=8B=A4=EB=A9=B4=20200=EA=B3=BC=20=ED=95=A8=EA=BB=98?= =?UTF-8?q?=20=EC=9C=A0=EC=A0=80=20=EC=A0=95=EB=B3=B4=20=EB=B0=98=ED=99=98?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../todogo/dto/UserRegistrationResult.java | 11 +++++++ .../todogo/user/UserController.java | 9 ++++-- .../todogo/user/UserRepository.java | 1 + .../kwonyonghoon/todogo/user/UserService.java | 25 ++++++++------- .../todogo/user/UserServiceTest.java | 32 ++++++++++++++++++- 5 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 src/main/java/kwonyonghoon/todogo/dto/UserRegistrationResult.java diff --git a/src/main/java/kwonyonghoon/todogo/dto/UserRegistrationResult.java b/src/main/java/kwonyonghoon/todogo/dto/UserRegistrationResult.java new file mode 100644 index 0000000..a0433e8 --- /dev/null +++ b/src/main/java/kwonyonghoon/todogo/dto/UserRegistrationResult.java @@ -0,0 +1,11 @@ +package kwonyonghoon.todogo.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class UserRegistrationResult { + private UserResponse userResponse; + private boolean isNewUser; +} diff --git a/src/main/java/kwonyonghoon/todogo/user/UserController.java b/src/main/java/kwonyonghoon/todogo/user/UserController.java index 162ce04..2764dad 100644 --- a/src/main/java/kwonyonghoon/todogo/user/UserController.java +++ b/src/main/java/kwonyonghoon/todogo/user/UserController.java @@ -1,6 +1,7 @@ package kwonyonghoon.todogo.user; import kwonyonghoon.todogo.dto.AddUserRequest; +import kwonyonghoon.todogo.dto.UserRegistrationResult; import kwonyonghoon.todogo.dto.UserResponse; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -17,8 +18,12 @@ public class UserController { @PostMapping("/api/users") public ResponseEntity registerUser(@RequestBody AddUserRequest request){ - UserResponse response = userService.registerUser(request.getPhoneNumber(), request.getName()); - return ResponseEntity.status(HttpStatus.CREATED).body(response); + UserRegistrationResult result = userService.registerUser(request.getPhoneNumber(), request.getName()); + if(result.isNewUser()){ + return ResponseEntity.status(HttpStatus.CREATED).body(result.getUserResponse()); + }else{ + return ResponseEntity.ok(result.getUserResponse()); + } } } diff --git a/src/main/java/kwonyonghoon/todogo/user/UserRepository.java b/src/main/java/kwonyonghoon/todogo/user/UserRepository.java index 77ba517..ae74de6 100644 --- a/src/main/java/kwonyonghoon/todogo/user/UserRepository.java +++ b/src/main/java/kwonyonghoon/todogo/user/UserRepository.java @@ -7,4 +7,5 @@ public interface UserRepository extends JpaRepository { boolean existsByPhoneNumber(String phoneNumber); Optional findByUuid(String uuid); + Optional findByPhoneNumber(String phoneNumber); } diff --git a/src/main/java/kwonyonghoon/todogo/user/UserService.java b/src/main/java/kwonyonghoon/todogo/user/UserService.java index 5846fb2..6e89004 100644 --- a/src/main/java/kwonyonghoon/todogo/user/UserService.java +++ b/src/main/java/kwonyonghoon/todogo/user/UserService.java @@ -1,6 +1,7 @@ package kwonyonghoon.todogo.user; import jakarta.transaction.Transactional; +import kwonyonghoon.todogo.dto.UserRegistrationResult; import kwonyonghoon.todogo.dto.UserResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -12,19 +13,19 @@ public class UserService { private final UserRepository userRepository; @Transactional - public UserResponse registerUser(String phoneNumber, String name){ + public UserRegistrationResult registerUser(String phoneNumber, String name){ + + return userRepository.findByPhoneNumber(phoneNumber) + .map(user -> new UserRegistrationResult(new UserResponse(user), false)) // 기존 유저 + .orElseGet(() -> { + User user = User.builder() + .phoneNumber(phoneNumber) + .name(name) + .build(); + User savedUser = userRepository.save(user); + return new UserRegistrationResult(new UserResponse(savedUser), true); // 새로 생성 + }); - if(userRepository.existsByPhoneNumber(phoneNumber)){ - throw new IllegalArgumentException("이미 등록된 전화번호입니다."); - } - - User user = User.builder() - .phoneNumber(phoneNumber) - .name(name) - .build(); - - User savedUser = userRepository.save(user); - return new UserResponse(savedUser); } } diff --git a/src/test/java/kwonyonghoon/todogo/user/UserServiceTest.java b/src/test/java/kwonyonghoon/todogo/user/UserServiceTest.java index d50171e..73bf12d 100644 --- a/src/test/java/kwonyonghoon/todogo/user/UserServiceTest.java +++ b/src/test/java/kwonyonghoon/todogo/user/UserServiceTest.java @@ -1,6 +1,7 @@ package kwonyonghoon.todogo.user; import jakarta.transaction.Transactional; +import kwonyonghoon.todogo.dto.UserRegistrationResult; import kwonyonghoon.todogo.dto.UserResponse; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -17,6 +18,8 @@ class UserServiceTest { @Autowired private UserService userService; + @Autowired + private UserRepository userRepository; @DisplayName("signup: 회원가입에 성공한다.") @Test @@ -26,12 +29,39 @@ void signup(){ String name = "홍길동"; // when - UserResponse response = userService.registerUser(phoneNumber, name); + UserRegistrationResult result = userService.registerUser(phoneNumber, name); // then + assertNotNull(result); + assertTrue(result.isNewUser()); + + UserResponse response = result.getUserResponse(); assertNotNull(response); assertEquals(phoneNumber, response.getPhoneNumber()); assertEquals(name, response.getName()); } + @DisplayName("signup: 이미 등록된 전화번호면 기존 유저를 반환한다.") + @Test + void signup_existingPhoneNumber(){ + // given + String phoneNumber = "010-1234-5680"; + String name = "홍길동"; + + // 일단 가입 + userService.registerUser(phoneNumber, name); + + // when(두번째 가입) + UserRegistrationResult result = userService.registerUser(phoneNumber, "홍길길동"); + + // then + assertNotNull(result); + assertFalse(result.isNewUser()); // 기존 유저인가 + + UserResponse response = result.getUserResponse(); + assertNotNull(response); + assertEquals(phoneNumber, response.getPhoneNumber()); + assertEquals(name, response.getName()); // 원래 등록한 이름인가 + } + } \ No newline at end of file