diff --git a/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserPersistenceProcessor.java b/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserPersistenceProcessor.java index 03dd0053..41426c66 100644 --- a/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserPersistenceProcessor.java +++ b/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserPersistenceProcessor.java @@ -4,9 +4,12 @@ import life.mosu.mosuserver.domain.user.entity.UserJpaEntity; import life.mosu.mosuserver.domain.user.entity.UserRole; import life.mosu.mosuserver.domain.user.repository.UserJpaRepository; +import life.mosu.mosuserver.global.exception.CustomRuntimeException; +import life.mosu.mosuserver.global.exception.ErrorCode; import life.mosu.mosuserver.global.processor.StepProcessor; import life.mosu.mosuserver.global.util.PhoneNumberUtil; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataIntegrityViolationException; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -19,28 +22,32 @@ public class OAuthUserPersistenceProcessor implements StepProcessor { - existingUser.updateOAuthUser( - info.gender(), - info.name(), - PhoneNumberUtil.formatPhoneNumber(info.phoneNumber()), - info.birthDay(), - info.marketingAgreed()); - return existingUser; - }) - .orElseGet(() -> { - final UserJpaEntity newUser = UserJpaEntity.builder() - .loginId(info.email()) - .gender(info.gender()) - .name(info.name()) - .birth(info.birthDay()) - .phoneNumber(PhoneNumberUtil.formatPhoneNumber(info.phoneNumber())) - .userRole(UserRole.ROLE_PENDING) - .provider(AuthProvider.KAKAO) - .agreedToMarketing(info.marketingAgreed()) - .build(); - return userRepository.save(newUser); - }); + try { + return userRepository.findByPhoneNumber(info.phoneNumber()) + .map(existingUser -> { + existingUser.updateOAuthUser( + info.gender(), + info.name(), + PhoneNumberUtil.formatPhoneNumber(info.phoneNumber()), + info.birthDay(), + info.marketingAgreed()); + return existingUser; + }) + .orElseGet(() -> { + final UserJpaEntity newUser = UserJpaEntity.builder() + .loginId(info.email()) + .gender(info.gender()) + .name(info.name()) + .birth(info.birthDay()) + .phoneNumber(PhoneNumberUtil.formatPhoneNumber(info.phoneNumber())) + .userRole(UserRole.ROLE_PENDING) + .provider(AuthProvider.KAKAO) + .agreedToMarketing(info.marketingAgreed()) + .build(); + return userRepository.save(newUser); + }); + } catch (DataIntegrityViolationException ex) { + throw new CustomRuntimeException(ErrorCode.USER_ALREADY_EXISTS); + } } } diff --git a/src/main/java/life/mosu/mosuserver/domain/virtualaccount/VirtualAccountLogJpaEntity.java b/src/main/java/life/mosu/mosuserver/domain/virtualaccount/VirtualAccountLogJpaEntity.java index 5c9e1468..2bd23ad9 100644 --- a/src/main/java/life/mosu/mosuserver/domain/virtualaccount/VirtualAccountLogJpaEntity.java +++ b/src/main/java/life/mosu/mosuserver/domain/virtualaccount/VirtualAccountLogJpaEntity.java @@ -2,6 +2,8 @@ import jakarta.persistence.Column; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.Table; @@ -41,7 +43,7 @@ public class VirtualAccountLogJpaEntity { @Column(name = "customer_email") private String customerEmail; - @Column(name = "deposit_status") + @Enumerated(EnumType.STRING) private DepositStatus depositStatus = DepositStatus.WAITING; @Builder(access = AccessLevel.PRIVATE) diff --git a/src/main/resources/db/migration/V3__alter_deposit_status.sql b/src/main/resources/db/migration/V3__alter_deposit_status.sql new file mode 100644 index 00000000..438a90d1 --- /dev/null +++ b/src/main/resources/db/migration/V3__alter_deposit_status.sql @@ -0,0 +1,5 @@ +ALTER TABLE virtual_account_log + DROP COLUMN deposit_status; + +ALTER TABLE virtual_account_log + ADD deposit_status VARCHAR(255) NULL; \ No newline at end of file diff --git a/src/test/java/life/mosu/mosuserver/global/fixture/UserTestFixture.java b/src/test/java/life/mosu/mosuserver/global/fixture/UserTestFixture.java index 9055ca9d..b1610515 100644 --- a/src/test/java/life/mosu/mosuserver/global/fixture/UserTestFixture.java +++ b/src/test/java/life/mosu/mosuserver/global/fixture/UserTestFixture.java @@ -23,8 +23,6 @@ public static UserJpaEntity mosu_user() { .phoneNumber(USER_PHONE_NUMBER) .birth(LocalDate.of(2005, 12, 1)) .userRole(UserRole.ROLE_USER) - .agreedToTermsOfService(true) - .agreedToPrivacyPolicy(true) .agreedToMarketing(true) .provider(AuthProvider.MOSU) .build(); @@ -39,8 +37,6 @@ public static UserJpaEntity kakao_user() { .phoneNumber(USER_PHONE_NUMBER) .birth(LocalDate.of(2005, 12, 1)) .userRole(UserRole.ROLE_USER) - .agreedToTermsOfService(true) - .agreedToPrivacyPolicy(true) .agreedToMarketing(true) .provider(AuthProvider.KAKAO) .build();