Skip to content

Commit

Permalink
Merge pull request #66 from Team-KeepGoing/feature/user
Browse files Browse the repository at this point in the history
Refactor :: refactor user domain related service logics
  • Loading branch information
miraexhoi authored Jul 6, 2024
2 parents d475c4f + 7358e49 commit 48cddcb
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<JwtResponse> 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<String> updateUserData(@RequestBody UserInfoRequest request, Authentication authentication) {
return userService.updateUserData(request, authentication);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<JwtResponse> registerUser(SignupRequest signupRequest) throws BusinessException;
ResponseEntity<String> updateUserData(UserInfoRequest request, Authentication authentication);
UserProfileDto provideUserInfo(Authentication authentication);
JwtResponse authenticateAndGenerateJWT(String email, String password);
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,23 @@
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;
import com.keepgoing.keepserver.domain.user.security.service.UserDetailsImpl;
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;

Expand All @@ -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<JwtResponse> 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<String> 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<DeviceResponseDto> borrowedDevicesDto = getBorrowedDevicesForUser(user);
List<BookResponseDto> borrowedBooksDto = getBorrowedBooksForUser(user);
hideUserPassword(user);

return new UserProfileDto(user, borrowedDevicesDto, borrowedBooksDto);
}

Expand Down Expand Up @@ -102,4 +99,36 @@ private List<BookResponseDto> 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());
}
}

0 comments on commit 48cddcb

Please sign in to comment.