From 208b0be097fc34494d574f0badbdf51fd8976ae6 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Tue, 23 Jun 2026 20:58:27 +0900 Subject: [PATCH] =?UTF-8?q?-=20=EC=B4=88=EB=8C=80=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD:=20=EC=9D=B4=EB=A9=94=EC=9D=BC=E2=86=92?= =?UTF-8?q?=ED=9C=B4=EB=8C=80=ED=8F=B0=20=EA=B8=B0=EB=B0=98=20=EC=B4=88?= =?UTF-8?q?=EB=8C=80=20=EC=A0=84=ED=99=98=20=EB=B0=8F=20UI=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=20-=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EC=88=98=EC=8B=A0=20=EB=8F=99=EC=9D=98=20=EC=B6=94=EA=B0=80:?= =?UTF-8?q?=20=EC=B4=88=EB=8C=80/=EC=B7=A8=EC=86=8C=20=EC=8B=9C=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=EB=B0=9C=EC=86=A1=20=EC=98=B5=EC=85=98=20?= =?UTF-8?q?=ED=83=91=EC=9E=AC=20-=20=EA=B4=80=EB=A6=AC=EC=9E=90=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80:=20=EC=86=8C=EC=86=8D?= =?UTF-8?q?=20=EC=A0=9C=EC=99=B8=20=EB=B0=8F=20=EA=B6=8C=ED=95=9C=20?= =?UTF-8?q?=EC=A1=B0=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apim/portal/agreements/service/AgreementsService.java | 3 +++ .../apim/portal/invitation/entity/UserInvitation.java | 8 +++++++- .../invitation/repository/UserInvitationRepository.java | 7 +++++++ .../portaluser/repository/PortalUserRepository.java | 3 +++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/eactive/apim/portal/agreements/service/AgreementsService.java b/src/main/java/com/eactive/apim/portal/agreements/service/AgreementsService.java index 864ea45..7b1e1ef 100644 --- a/src/main/java/com/eactive/apim/portal/agreements/service/AgreementsService.java +++ b/src/main/java/com/eactive/apim/portal/agreements/service/AgreementsService.java @@ -6,6 +6,7 @@ import com.eactive.apim.portal.agreements.entity.AgreementsId; import com.eactive.apim.portal.agreements.entity.AgreementsStatus; import com.eactive.apim.portal.agreements.repository.AgreementsRepository; import com.eactive.apim.portal.common.exception.NotFoundException; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -16,6 +17,7 @@ import java.util.Optional; @Service @Transactional +@Slf4j public class AgreementsService { private static final String NOT_FOUND_MESSAGE = "해당 버전의 약관이 존재하지 않습니다."; @@ -111,6 +113,7 @@ public class AgreementsService { public List findAllAgreementsSortPublishedOn(AgreementType agreementType) { List agreements = agreementsRepository.findAllByAgreementsTypeOrderByPublishedOnDesc(agreementType); if(agreements.isEmpty()) { + log.error("해당 약관 종류의 약관이 존재하지 않습니다. agreementType={}", agreementType); throw new IllegalStateException(NOT_FOUND_BY_DATE_MESSAGE); } return agreements; diff --git a/src/main/java/com/eactive/apim/portal/invitation/entity/UserInvitation.java b/src/main/java/com/eactive/apim/portal/invitation/entity/UserInvitation.java index 77fc5ed..7533a2c 100644 --- a/src/main/java/com/eactive/apim/portal/invitation/entity/UserInvitation.java +++ b/src/main/java/com/eactive/apim/portal/invitation/entity/UserInvitation.java @@ -1,6 +1,7 @@ package com.eactive.apim.portal.invitation.entity; import com.eactive.apim.portal.invitation.entity.UserInvitationEnums.InvitationStatus; +import com.eactive.apim.portal.jpa.PersonalDataEncryptConverter; import com.eactive.eai.data.converter.LocalDateTimeToStringConverter14; import lombok.Data; import org.hibernate.annotations.Comment; @@ -29,10 +30,15 @@ public class UserInvitation { @Comment("기관ID") private String orgId; - @Column(name = "INVITATION_EMAIL", length = 30, nullable = false) + @Column(name = "INVITATION_EMAIL", length = 256) @Comment("초대이메일") private String invitationEmail; + @Column(name = "INVITATION_MOBILE", length = 256) + @Convert(converter = PersonalDataEncryptConverter.class) + @Comment("초대휴대폰") + private String invitationMobile; + @Column(name = "INVITATION_DATE", length = 14, nullable = false) @Convert(converter = LocalDateTimeToStringConverter14.class) @Comment("초대일시") diff --git a/src/main/java/com/eactive/apim/portal/invitation/repository/UserInvitationRepository.java b/src/main/java/com/eactive/apim/portal/invitation/repository/UserInvitationRepository.java index f79fe17..a87cee9 100644 --- a/src/main/java/com/eactive/apim/portal/invitation/repository/UserInvitationRepository.java +++ b/src/main/java/com/eactive/apim/portal/invitation/repository/UserInvitationRepository.java @@ -22,4 +22,11 @@ public interface UserInvitationRepository extends JpaRepository findFirstByInvitationEmailAndOrgIdAndStatus(String email, String orgId, InvitationStatus status); Optional findFirstByInvitationEmailAndOrgId(String email, String orgId); + + // 휴대폰 번호 기반 초대 조회 (INVITATION_MOBILE 은 결정적 암호화로 저장되어 equality 조회 가능) + Optional findFirstByInvitationMobileAndStatus(String mobile, InvitationStatus status); + + Optional findFirstByInvitationMobileAndOrgIdAndStatus(String mobile, String orgId, InvitationStatus status); + + Optional findFirstByInvitationMobileAndOrgId(String mobile, String orgId); } diff --git a/src/main/java/com/eactive/apim/portal/portaluser/repository/PortalUserRepository.java b/src/main/java/com/eactive/apim/portal/portaluser/repository/PortalUserRepository.java index 228f501..11b57fb 100644 --- a/src/main/java/com/eactive/apim/portal/portaluser/repository/PortalUserRepository.java +++ b/src/main/java/com/eactive/apim/portal/portaluser/repository/PortalUserRepository.java @@ -30,6 +30,9 @@ public interface PortalUserRepository extends BaseRepository boolean existsByMobileNumber(String mobileNumber); + // 휴대폰 번호 기반 기존 회원 조회 (mobileNumber 는 유니크 제약이 없어 다건 가능) + List findAllByMobileNumber(String mobileNumber); + @Query("SELECT u FROM PortalUser u WHERE u.portalOrg = :org AND u.userStatus != :status") Page findActiveUsers(@Param("org") PortalOrg org, @Param("status") PortalUserEnums.UserStatus status, Pageable pageable);