From 8db2525a8cc34084d8494d24c7ed41c27bca531e Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 23:15:34 +0900 Subject: [PATCH 1/2] MOSU feat: add error handling for user creation in OAuthUserPersistenceProcessor --- .../oauth/OAuthUserPersistenceProcessor.java | 53 +++++++++++-------- .../global/fixture/UserTestFixture.java | 4 -- 2 files changed, 30 insertions(+), 27 deletions(-) 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/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(); From 92318f16549bc3bc5ec3f3260b87a79865a3816c Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Mon, 11 Aug 2025 23:16:08 +0900 Subject: [PATCH 2/2] MOSU feat: update deposit_status column in virtual_account_log to use ENUM type --- .../domain/virtualaccount/VirtualAccountLogJpaEntity.java | 4 +++- src/main/resources/db/migration/V3__alter_deposit_status.sql | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/db/migration/V3__alter_deposit_status.sql 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