Skip to content
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
11 changes: 11 additions & 0 deletions src/main/java/kwonyonghoon/todogo/dto/UserRegistrationResult.java
Original file line number Diff line number Diff line change
@@ -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;
}
9 changes: 7 additions & 2 deletions src/main/java/kwonyonghoon/todogo/user/UserController.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -17,8 +18,12 @@ public class UserController {

@PostMapping("/api/users")
public ResponseEntity<UserResponse> 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());
}
}

}
1 change: 1 addition & 0 deletions src/main/java/kwonyonghoon/todogo/user/UserRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@
public interface UserRepository extends JpaRepository<User, Long> {
boolean existsByPhoneNumber(String phoneNumber);
Optional<User> findByUuid(String uuid);
Optional<User> findByPhoneNumber(String phoneNumber);
}
25 changes: 13 additions & 12 deletions src/main/java/kwonyonghoon/todogo/user/UserService.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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);
}

}
32 changes: 31 additions & 1 deletion src/test/java/kwonyonghoon/todogo/user/UserServiceTest.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -17,6 +18,8 @@ class UserServiceTest {

@Autowired
private UserService userService;
@Autowired
private UserRepository userRepository;

@DisplayName("signup: 회원가입에 성공한다.")
@Test
Expand All @@ -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()); // 원래 등록한 이름인가
}

}
Loading