회원가입 로직 가독성 리팩토링

This commit is contained in:
jinia91
2022-05-18 23:02:45 +09:00
parent f5b55d03d8
commit 7bcdfe8c21
7 changed files with 36 additions and 39 deletions

View File

@@ -3,14 +3,16 @@ package myblog.blog.member.adapter.outgoing.repository;
import myblog.blog.member.doamin.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface JpaMemberRepository extends JpaRepository<Member, Long> {
/*
- Id로 유저 찾기
*/
Member findByUserId(String userId);
Optional<Member> findByUserId(String userId);
/*
- Email로 유저 찾기
*/
Member findByEmail(String email);
Optional<Member> findByEmail(String email);
}

View File

@@ -14,7 +14,7 @@ public class MemberRepositoryAdapter implements MemberRepositoryPort {
private final JpaMemberRepository jpaMemberRepository;
@Override
public Member findByEmail(String email) {
public Optional<Member> findByEmail(String email) {
return jpaMemberRepository.findByEmail(email);
}
@Override
@@ -26,7 +26,7 @@ public class MemberRepositoryAdapter implements MemberRepositoryPort {
return jpaMemberRepository.findById(memberId);
}
@Override
public Member findByUserId(String providerId) {
public Optional<Member> findByUserId(String providerId) {
return jpaMemberRepository.findByUserId(providerId);
}
}

View File

@@ -5,7 +5,6 @@ import myblog.blog.member.application.port.incomming.response.userinfo.Oauth2Use
import myblog.blog.member.application.port.outgoing.MemberRepositoryPort;
import myblog.blog.member.doamin.Member;
import myblog.blog.member.doamin.Role;
import lombok.RequiredArgsConstructor;
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
@@ -23,9 +22,6 @@ public class Oauth2MemberService extends DefaultOAuth2UserService {
private final MemberRepositoryPort memberRepositoryPort;
private final UserInfoFactory userInfoFactory;
/*
- OAuth2 인증 로그인
*/
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
var oAuth2User = super.loadUser(userRequest);
@@ -35,31 +31,19 @@ public class Oauth2MemberService extends DefaultOAuth2UserService {
return new PrincipalDetails(member, userInfo.getAttributes());
}
/*
- 회원가입 or 로그인 로직
*/
private Member getOrJoinMember(Oauth2UserInfo userInfo) {
//DB에서 조회해서 존재시 로그인처리, 미존재시 가입처리
var member = memberRepositoryPort.findByUserId(userInfo.getProviderId());
if(member == null) {
//Email 중복검증
if(memberRepositoryPort.findByEmail(userInfo.getEmail()) != null)
throw new OAuth2AuthenticationException("duplicateEmail");
member = Member.builder()
.username(userInfo.getUserName())
.picUrl(userInfo.getPicture())
.email(userInfo.getEmail())
.userId(userInfo.getProviderId())
.providerId(userInfo.getProviderId())
.provider(userInfo.getProvider())
.role(Role.USER)
.build();
memberRepositoryPort.save(member);
}
// 유저 네임 변경시 더티체킹으로 유저네임 변경
if(!member.getUsername().equals(userInfo.getUserName())){
member.changeUsername(userInfo.getUserName());
}
var member = memberRepositoryPort.findByUserId(userInfo.getProviderId())
.orElseGet(() -> signUpNewMember(userInfo));
member.renewUsername(userInfo.getUserName());
return member;
}
private Member signUpNewMember(Oauth2UserInfo userInfo) {
memberRepositoryPort.findByEmail(userInfo.getEmail())
.ifPresent(alreadyMember -> {
throw new OAuth2AuthenticationException("duplicateEmail");});
var newMember = userInfo.toEntity();
memberRepositoryPort.save(newMember);
return newMember;
}
}

View File

@@ -36,9 +36,6 @@ public class UserInfoFactory {
.collect(Collectors.toMap(ProviderType::getValue, providerType->providerType)));
}
/*
- 팩토리 메소드
*/
public Oauth2UserInfo makeOauth2UserInfoOf(String registrationId, OAuth2User oAuth2User) {
var providerTypeOptional = createEnumFromString(registrationId);
return userInfoFactoryMap

View File

@@ -1,5 +1,8 @@
package myblog.blog.member.application.port.incomming.response.userinfo;
import myblog.blog.member.doamin.Member;
import myblog.blog.member.doamin.Role;
import java.util.Map;
/*
@@ -19,5 +22,15 @@ public interface Oauth2UserInfo {
Map<String, Object> getAttributes();
default Member toEntity(){
return Member.builder()
.username(this.getUserName())
.picUrl(this.getPicture())
.email(this.getEmail())
.userId(this.getProviderId())
.providerId(this.getProviderId())
.provider(this.getProvider())
.role(Role.USER)
.build();
}
}

View File

@@ -5,8 +5,8 @@ import myblog.blog.member.doamin.Member;
import java.util.Optional;
public interface MemberRepositoryPort {
Member findByEmail(String email);
Optional<Member> findByEmail(String email);
void save(Member member);
Optional<Member> findById(Long memberId);
Member findByUserId(String providerId);
Optional<Member> findByUserId(String providerId);
}

View File

@@ -72,7 +72,8 @@ public class Member extends BasicEntity {
/*
- 유저명 변경 더티체킹 로직
*/
public void changeUsername(String username) {
public void renewUsername(String username) {
if(!this.username.equals(username))
this.username = username;
}
}