Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[HOTFIX] #229 - 회원 등록 후 flush()를 호출하여 DB에 반영 #230

Merged
merged 2 commits into from
Oct 5, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public Long registerMemberWithUserInfo(final MemberInfoResponse memberInfoRespon
log.info("Granting MEMBER role to new user with role: {}", users.getRole());

users = userRepository.save(users);
userRepository.flush();

log.info("Registering new user with role: {}", users.getRole());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
import com.beat.global.auth.client.dto.MemberInfoResponse;
import com.beat.global.auth.client.dto.MemberLoginRequest;
import com.beat.global.common.exception.BadRequestException;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -20,84 +22,88 @@
@Service
public class SocialLoginService {

private final MemberService memberService;
private final MemberRegistrationService memberRegistrationService;
private final AuthenticationService authenticationService;
private final KakaoSocialService kakaoSocialService;
private final MemberService memberService;
private final MemberRegistrationService memberRegistrationService;
private final AuthenticationService authenticationService;
private final KakaoSocialService kakaoSocialService;

/**
* 소셜 로그인 또는 회원가입을 처리하는 메서드.
* 소셜 서비스에서 받은 authorizationCode와 로그인 요청 정보를 기반으로
* 사용자 정보를 조회하고, 로그인 또는 회원가입 후 성공 응답을 반환.
*
* @param authorizationCode 소셜 인증 코드
* @param loginRequest 로그인 요청 정보
* @return 로그인 성공 응답(LoginSuccessResponse)
*/
@Transactional
public LoginSuccessResponse handleSocialLogin(final String authorizationCode, final MemberLoginRequest loginRequest) {
MemberInfoResponse memberInfoResponse = findMemberInfoFromSocialService(authorizationCode, loginRequest);
return generateLoginResponseFromMemberInfo(memberInfoResponse);
}
/**
* 소셜 로그인 또는 회원가입을 처리하는 메서드.
* 소셜 서비스에서 받은 authorizationCode와 로그인 요청 정보를 기반으로
* 사용자 정보를 조회하고, 로그인 또는 회원가입 후 성공 응답을 반환.
*
* @param authorizationCode 소셜 인증 코드
* @param loginRequest 로그인 요청 정보
* @return 로그인 성공 응답(LoginSuccessResponse)
*/
@Transactional
public LoginSuccessResponse handleSocialLogin(final String authorizationCode,
final MemberLoginRequest loginRequest) {
MemberInfoResponse memberInfoResponse = findMemberInfoFromSocialService(authorizationCode, loginRequest);
return generateLoginResponseFromMemberInfo(memberInfoResponse);
}

/**
* 소셜 서비스에서 사용자 정보를 조회하는 메서드.
* 소셜 타입에 따라 적절한 소셜 서비스를 사용하여 로그인 정보를 가져옴.
*
* @param authorizationCode 소셜 인증 코드
* @param loginRequest 로그인 요청 정보
* @return 소셜 서비스에서 가져온 사용자 정보(MemberInfoResponse)
*/
public MemberInfoResponse findMemberInfoFromSocialService(final String authorizationCode, final MemberLoginRequest loginRequest) {
SocialService socialService = findSocialService(loginRequest.socialType());
return socialService.login(authorizationCode, loginRequest);
}
/**
* 소셜 서비스에서 사용자 정보를 조회하는 메서드.
* 소셜 타입에 따라 적절한 소셜 서비스를 사용하여 로그인 정보를 가져옴.
*
* @param authorizationCode 소셜 인증 코드
* @param loginRequest 로그인 요청 정보
* @return 소셜 서비스에서 가져온 사용자 정보(MemberInfoResponse)
*/
private MemberInfoResponse findMemberInfoFromSocialService(final String authorizationCode,
final MemberLoginRequest loginRequest) {
SocialService socialService = findSocialService(loginRequest.socialType());
return socialService.login(authorizationCode, loginRequest);
}

/**
* 소셜 타입에 맞는 SocialService를 반환하는 메서드.
* 소셜 로그인 타입이 KAKAO인지, GOOGLE인지 등에 따라 적절한 서비스를 반환.
*
* @param socialType 소셜 타입(KAKAO, GOOGLE 등)
* @return 적절한 SocialService 구현체
*/
private SocialService findSocialService(SocialType socialType) {
return switch (socialType) {
case KAKAO -> kakaoSocialService;
// case GOOGLE -> googleSocialService;
default -> throw new BadRequestException(MemberErrorCode.SOCIAL_TYPE_BAD_REQUEST);
};
}
/**
* 소셜 타입에 맞는 SocialService를 반환하는 메서드.
* 소셜 로그인 타입이 KAKAO인지, GOOGLE인지 등에 따라 적절한 서비스를 반환.
*
* @param socialType 소셜 타입(KAKAO, GOOGLE 등)
* @return 적절한 SocialService 구현체
*/
private SocialService findSocialService(SocialType socialType) {
return switch (socialType) {
case KAKAO -> kakaoSocialService;
// case GOOGLE -> googleSocialService;
default -> throw new BadRequestException(MemberErrorCode.SOCIAL_TYPE_BAD_REQUEST);
};
}

/**
* 사용자 정보를 기반으로 로그인 또는 회원가입을 처리한 후 로그인 성공 응답을 생성하는 메서드.
* 사용자가 존재하면 로그인 처리를, 존재하지 않으면 회원가입 후 로그인 처리를 수행.
*
* @param memberInfoResponse 소셜 서비스에서 가져온 사용자 정보
* @return 로그인 성공 응답(LoginSuccessResponse)
*/
private LoginSuccessResponse generateLoginResponseFromMemberInfo(final MemberInfoResponse memberInfoResponse) {
Long memberId = findOrRegisterMember(memberInfoResponse);
/**
* 사용자 정보를 기반으로 로그인 또는 회원가입을 처리한 후 로그인 성공 응답을 생성하는 메서드.
* 사용자가 존재하면 로그인 처리를, 존재하지 않으면 회원가입 후 로그인 처리를 수행.
*
* @param memberInfoResponse 소셜 서비스에서 가져온 사용자 정보
* @return 로그인 성공 응답(LoginSuccessResponse)
*/
private LoginSuccessResponse generateLoginResponseFromMemberInfo(final MemberInfoResponse memberInfoResponse) {
Long memberId = findOrRegisterMember(memberInfoResponse);

Users user = memberService.findUserByMemberId(memberId);
Users user = memberService.findUserByMemberId(memberId);

return authenticationService.generateLoginSuccessResponse(memberId, user, memberInfoResponse);
}
return authenticationService.generateLoginSuccessResponse(memberId, user, memberInfoResponse);
}

/**
* 사용자 정보(Social ID와 Social Type)를 통해 기존 회원을 찾거나,
* 없으면 새로운 회원을 등록하는 메서드.
*
* @param memberInfoResponse 소셜 서비스에서 가져온 사용자 정보
* @return 등록된 회원 또는 기존 회원의 ID
*/
private Long findOrRegisterMember(final MemberInfoResponse memberInfoResponse) {
boolean memberExists = memberService.checkMemberExistsBySocialIdAndSocialType(memberInfoResponse.socialId(), memberInfoResponse.socialType());
/**
* 사용자 정보(Social ID와 Social Type)를 통해 기존 회원을 찾거나,
* 없으면 새로운 회원을 등록하는 메서드.
*
* @param memberInfoResponse 소셜 서비스에서 가져온 사용자 정보
* @return 등록된 회원 또는 기존 회원의 ID
*/
private Long findOrRegisterMember(final MemberInfoResponse memberInfoResponse) {
boolean memberExists = memberService.checkMemberExistsBySocialIdAndSocialType(memberInfoResponse.socialId(),
memberInfoResponse.socialType());

if (memberExists) {
Member existingMember = memberService.findMemberBySocialIdAndSocialType(memberInfoResponse.socialId(), memberInfoResponse.socialType());
return existingMember.getId();
}
if (memberExists) {
Member existingMember = memberService.findMemberBySocialIdAndSocialType(memberInfoResponse.socialId(),
memberInfoResponse.socialType());
return existingMember.getId();
}

return memberRegistrationService.registerMemberWithUserInfo(memberInfoResponse);
}
return memberRegistrationService.registerMemberWithUserInfo(memberInfoResponse);
}
}
Loading