diff --git a/src/main/java/com/keepgoing/keepserver/domain/user/controller/UserController.java b/src/main/java/com/keepgoing/keepserver/domain/user/controller/UserController.java index a9a33616..e8358fee 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/user/controller/UserController.java +++ b/src/main/java/com/keepgoing/keepserver/domain/user/controller/UserController.java @@ -25,39 +25,27 @@ public class UserController { private final UserService userService; - private final UserServiceImpl userServiceImpl; - @Operation(summary = "로그인", description = "로그인을 진행합니다.") @PostMapping("/signin") public ResponseEntity authenticateUser(@RequestBody LoginRequest loginRequest) { - return ResponseEntity.ok().body(userServiceImpl.authenticateAndGenerateJWT(loginRequest.getEmail(), loginRequest.getPassword())); + return ResponseEntity.ok().body(userService.authenticateAndGenerateJWT(loginRequest.getEmail(), loginRequest.getPassword())); } @Operation(summary = "회원가입", description = "회원가입을 진행합니다.") @PostMapping("/signup") public ResponseEntity registerAndAuthenticateUser(@RequestBody SignupRequest signupRequest) throws BusinessException { - - /* 유저 등록 */ - userService.registerUser(signupRequest); - - JwtResponse jwtResponse = userServiceImpl.authenticateAndGenerateJWT(signupRequest.getEmail(), signupRequest.getPassword()); - ApiResponse response = ApiResponse.setApiResponse(true, "회원 가입이 완료 되었습니다!", jwtResponse); - - return ResponseEntity.ok().body(response); + return ResponseEntity.ok().body(userService.registerUser(signupRequest)); } @Operation(summary = "프로필", description = "토큰을 이용하여 유저 정보와 대여한 기자재 및 도서 목록을 조회합니다.") @GetMapping("/userinfo") public UserProfileDto provideUserInfo(Authentication authentication) { - String userEmail = authentication.getName(); - return userService.provideUserInfo(userEmail); + return userService.provideUserInfo(authentication); } @Operation(summary = "프로필 수정", description = "유저 정보를 수정합니다.") @PutMapping("/userfix") - public void updateUserData(@RequestBody UserInfoRequest request, Authentication authentication) { - String userName = authentication.getName(); - userServiceImpl.updateUserData(request, userName); - ResponseEntity.ok().body(""); + public ResponseEntity updateUserData(@RequestBody UserInfoRequest request, Authentication authentication) { + return userService.updateUserData(request, authentication); } } diff --git a/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserService.java b/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserService.java index 4f4e2c82..dc5a225a 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserService.java +++ b/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserService.java @@ -3,10 +3,15 @@ import com.keepgoing.keepserver.domain.user.payload.request.SignupRequest; import com.keepgoing.keepserver.domain.user.payload.request.UserInfoRequest; import com.keepgoing.keepserver.domain.user.payload.request.UserProfileDto; +import com.keepgoing.keepserver.domain.user.payload.response.ApiResponse; +import com.keepgoing.keepserver.domain.user.payload.response.JwtResponse; import com.keepgoing.keepserver.global.exception.BusinessException; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; public interface UserService { - void registerUser(SignupRequest signupRequest) throws BusinessException; - void updateUserData(UserInfoRequest request, String email); - UserProfileDto provideUserInfo(String userEmail); + ApiResponse registerUser(SignupRequest signupRequest) throws BusinessException; + ResponseEntity updateUserData(UserInfoRequest request, Authentication authentication); + UserProfileDto provideUserInfo(Authentication authentication); + JwtResponse authenticateAndGenerateJWT(String email, String password); } \ No newline at end of file diff --git a/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java b/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java index 993beb84..4c541350 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java +++ b/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java @@ -12,6 +12,7 @@ import com.keepgoing.keepserver.domain.user.payload.request.SignupRequest; import com.keepgoing.keepserver.domain.user.payload.request.UserInfoRequest; import com.keepgoing.keepserver.domain.user.payload.request.UserProfileDto; +import com.keepgoing.keepserver.domain.user.payload.response.ApiResponse; import com.keepgoing.keepserver.domain.user.payload.response.JwtResponse; import com.keepgoing.keepserver.domain.user.repository.user.UserRepository; import com.keepgoing.keepserver.domain.user.security.jwt.JwtUtils; @@ -19,14 +20,15 @@ import com.keepgoing.keepserver.global.exception.BusinessException; import com.keepgoing.keepserver.global.exception.device.DeviceException; import com.keepgoing.keepserver.global.exception.error.ErrorCode; -import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -45,35 +47,30 @@ public class UserServiceImpl implements UserService { @Override @Transactional - public void registerUser(SignupRequest signupRequest) throws BusinessException { - if (userRepository.existsByEmail(signupRequest.getEmail())) { - throw new BusinessException(ErrorCode.EMAIL_BAD_REQUEST); - } - User user = User.registerUser( - signupRequest.getEmail(), encoder.encode(signupRequest.getPassword()), - signupRequest.getName(), signupRequest.isTeacher() - ); + public ApiResponse registerUser(SignupRequest signupRequest) throws BusinessException { + validateEmail(signupRequest.getEmail()); + User user = createUser(signupRequest); userRepository.save(user); + JwtResponse jwtResponse = authenticateAndGenerateJWT(signupRequest.getEmail(), signupRequest.getPassword()); + return ApiResponse.setApiResponse(true, "회원 가입이 완료 되었습니다!", jwtResponse); } + @Override @Transactional - public void updateUserData(UserInfoRequest request, String email) { - User user = userRepository.findByEmailEquals(email) - .orElseThrow(() -> new BusinessException(ErrorCode.NOT_FOUND)); - - user.fixUserData( - request.getEmail(), - request.getName() - ); + public ResponseEntity updateUserData(UserInfoRequest request, Authentication authentication) { + String userEmail = getEmailFromAuthentication(authentication); + User user = findUserByEmail(userEmail); + updateUser(user, request); + return ResponseEntity.ok().body(""); } @Override - public UserProfileDto provideUserInfo(String userEmail) { - User user = userRepository.findByEmailEquals(userEmail).orElseThrow(DeviceException::userNotFound); + public UserProfileDto provideUserInfo(Authentication authentication) { + String userEmail = getNameByAuthentication(authentication); + User user = findUserByEmail(userEmail); List borrowedDevicesDto = getBorrowedDevicesForUser(user); List borrowedBooksDto = getBorrowedBooksForUser(user); hideUserPassword(user); - return new UserProfileDto(user, borrowedDevicesDto, borrowedBooksDto); } @@ -102,4 +99,36 @@ private List getBorrowedBooksForUser(User user) { private void hideUserPassword(User user) { user.hidePassword(""); } + + private String getNameByAuthentication(Authentication authentication) { + return authentication.getName(); + } + + private void validateEmail(String email) throws BusinessException { + if (userRepository.existsByEmail(email)) { + throw new BusinessException(ErrorCode.EMAIL_BAD_REQUEST); + } + } + + private User createUser(SignupRequest signupRequest) { + return User.registerUser( + signupRequest.getEmail(), + encoder.encode(signupRequest.getPassword()), + signupRequest.getName(), + signupRequest.isTeacher() + ); + } + + private String getEmailFromAuthentication(Authentication authentication) { + return getNameByAuthentication(authentication); + } + + private User findUserByEmail(String email) { + return userRepository.findByEmailEquals(email) + .orElseThrow(DeviceException::userNotFound); + } + + private void updateUser(User user, UserInfoRequest request) { + user.fixUserData(request.getEmail(), request.getName()); + } }