회원가입 로직 가독성 리팩토링
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user