diff --git a/src/main/java/com/project/coalba/domain/auth/repository/UserRepository.java b/src/main/java/com/project/coalba/domain/auth/repository/UserRepository.java index 52e78f8..7b1d375 100644 --- a/src/main/java/com/project/coalba/domain/auth/repository/UserRepository.java +++ b/src/main/java/com/project/coalba/domain/auth/repository/UserRepository.java @@ -6,6 +6,6 @@ import java.util.Optional; -public interface UserRepository extends JpaRepository { +public interface UserRepository extends JpaRepository, UserRepositoryCustom { Optional findByProviderIdAndRole(String providerId, Role role); } diff --git a/src/main/java/com/project/coalba/domain/auth/repository/UserRepositoryCustom.java b/src/main/java/com/project/coalba/domain/auth/repository/UserRepositoryCustom.java new file mode 100644 index 0000000..d1ddd22 --- /dev/null +++ b/src/main/java/com/project/coalba/domain/auth/repository/UserRepositoryCustom.java @@ -0,0 +1,5 @@ +package com.project.coalba.domain.auth.repository; + +public interface UserRepositoryCustom { + Boolean existsByProfile(Long userId); +} diff --git a/src/main/java/com/project/coalba/domain/auth/repository/impl/UserRepositoryImpl.java b/src/main/java/com/project/coalba/domain/auth/repository/impl/UserRepositoryImpl.java new file mode 100644 index 0000000..66666e9 --- /dev/null +++ b/src/main/java/com/project/coalba/domain/auth/repository/impl/UserRepositoryImpl.java @@ -0,0 +1,34 @@ +package com.project.coalba.domain.auth.repository.impl; + +import com.project.coalba.domain.auth.entity.enums.Role; +import com.project.coalba.domain.auth.repository.UserRepositoryCustom; +import com.querydsl.jpa.JPAExpressions; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; + +import static com.project.coalba.domain.auth.entity.QUser.*; +import static com.project.coalba.domain.profile.entity.QBoss.*; +import static com.project.coalba.domain.profile.entity.QStaff.*; + +@RequiredArgsConstructor +public class UserRepositoryImpl implements UserRepositoryCustom { + private final JPAQueryFactory queryFactory; + + @Override + public Boolean existsByProfile(Long userId) { + return queryFactory.selectFrom(user) + .where(user.id.eq(userId), + user.role.eq(Role.BOSS).and( + JPAExpressions.selectFrom(boss) + .where(boss.user.id.eq(userId)) + .exists() + ).or(user.role.eq(Role.STAFF).and( + JPAExpressions.selectFrom(staff) + .where(staff.user.id.eq(userId)) + .exists() + ) + ) + ) + .fetchOne() != null; + } +} diff --git a/src/main/java/com/project/coalba/domain/auth/service/AuthService.java b/src/main/java/com/project/coalba/domain/auth/service/AuthService.java index 4f1a635..8df1f40 100644 --- a/src/main/java/com/project/coalba/domain/auth/service/AuthService.java +++ b/src/main/java/com/project/coalba/domain/auth/service/AuthService.java @@ -26,16 +26,13 @@ public class AuthService { @Transactional public AuthResponse login(SocialInfo socialInfo, Role role) { Optional userOptional = getSubscribedUser(socialInfo.getProviderId(), role); - boolean isNewUser = userOptional.isEmpty(); - - User loginUser; - if (isNewUser) loginUser = joinUser(socialInfo, role); - else loginUser = updateUser(userOptional.get(), socialInfo); + User loginUser = userOptional.map(user -> updateUser(user, socialInfo)) + .orElseGet(() -> joinUser(socialInfo, role)); String accessToken = tokenManager.createAccessToken(loginUser.getProviderId(), loginUser.getId()); String refreshToken = issueRefreshToken(getUserRefreshToken(loginUser.getId()).orElse(null)); manageRefreshToken(loginUser, refreshToken); - return new AuthResponse(accessToken, refreshToken, isNewUser); + return new AuthResponse(accessToken, refreshToken, isNewUser(loginUser.getId())); } @Transactional @@ -70,6 +67,10 @@ private User updateUser(User user, SocialInfo socialInfo) { return user; } + private Boolean isNewUser(Long userId) { + return userRepository.existsByProfile(userId); + } + private void manageRefreshToken(User loginUser, String refreshToken) { Optional userRefreshTokenOptional = getUserRefreshToken(loginUser.getId()); userRefreshTokenOptional.ifPresentOrElse(userRefreshToken -> userRefreshToken.updateToken(refreshToken),