diff --git a/src/main/java/com/tiki/server/email/emailsender/service/EmailSenderService.java b/src/main/java/com/tiki/server/email/emailsender/service/EmailSenderService.java index c29133c0..bd6e64f8 100644 --- a/src/main/java/com/tiki/server/email/emailsender/service/EmailSenderService.java +++ b/src/main/java/com/tiki/server/email/emailsender/service/EmailSenderService.java @@ -1,5 +1,6 @@ package com.tiki.server.email.emailsender.service; +import static com.tiki.server.email.teaminvitation.messages.ErrorCode.ALREADY_INVITED; import static com.tiki.server.memberteammanager.message.ErrorCode.CONFLICT_TEAM_MEMBER; import com.tiki.server.common.entity.Position; @@ -9,6 +10,7 @@ import com.tiki.server.email.teaminvitation.adapter.TeamInvitationFinder; import com.tiki.server.email.teaminvitation.adapter.TeamInvitationSaver; import com.tiki.server.email.teaminvitation.entity.TeamInvitation; +import com.tiki.server.email.teaminvitation.exception.TeamInvitationException; import com.tiki.server.email.verification.adapter.EmailVerificationSaver; import com.tiki.server.email.verification.domain.EmailVerification; import com.tiki.server.member.adapter.MemberFinder; @@ -64,6 +66,7 @@ public void createTeamInvitation(final TeamInvitationCreateServiceRequest reques memberTeamManager.checkMemberAccessible(Position.ADMIN); Team team = teamFinder.findById(request.teamId()); checkIsPresentTeamMember(request); + checkDuplicateInvitation(request); TeamInvitation teamInvitation = teamInvitationSaver.createTeamInvitation( TeamInvitation.of(memberTeamManager.getName(), request.teamId(), request.targetEmail())); mailSender.sendTeamInvitationMail( @@ -75,6 +78,14 @@ public void createTeamInvitation(final TeamInvitationCreateServiceRequest reques ); } + private void checkDuplicateInvitation(final TeamInvitationCreateServiceRequest request) { + teamInvitationFinder.presentByTeamIdAndEmail(request.teamId(), request.targetEmail() + ) + .ifPresent(invitation -> { + throw new TeamInvitationException(ALREADY_INVITED); + }); + } + private void checkIsPresentTeamMember(final TeamInvitationCreateServiceRequest request) { if (memberTeamManagerFinder.existsByTeamIdAndMemberEmail(request.teamId(), request.targetEmail())) { throw new MemberTeamManagerException(CONFLICT_TEAM_MEMBER); diff --git a/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationFinder.java b/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationFinder.java index f3edb080..2edcab0d 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationFinder.java +++ b/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationFinder.java @@ -1,14 +1,17 @@ package com.tiki.server.email.teaminvitation.adapter; import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.email.Email; import com.tiki.server.email.teaminvitation.exception.TeamInvitationException; import com.tiki.server.email.teaminvitation.entity.TeamInvitation; import com.tiki.server.email.teaminvitation.repository.TeamInvitationRepository; +import java.util.Optional; import lombok.RequiredArgsConstructor; import java.time.LocalDate; import java.util.List; +import static com.tiki.server.email.teaminvitation.messages.ErrorCode.ALREADY_INVITED; import static com.tiki.server.email.teaminvitation.messages.ErrorCode.INVALID_TEAM_INVITATION; @RepositoryAdapter @@ -29,4 +32,8 @@ public List findByExpiredDate(final LocalDate expiredDate) { public List findAllByTeamId(final long teamId) { return teamInvitationRepository.findAllByTeamId(teamId); } + + public Optional presentByTeamIdAndEmail(final long teamId, final Email targetEmail){ + return teamInvitationRepository.findByTeamIdAndEmail(teamId, targetEmail); + } } diff --git a/src/main/java/com/tiki/server/email/teaminvitation/messages/ErrorCode.java b/src/main/java/com/tiki/server/email/teaminvitation/messages/ErrorCode.java index fbc641fc..d4fdcb22 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/messages/ErrorCode.java +++ b/src/main/java/com/tiki/server/email/teaminvitation/messages/ErrorCode.java @@ -11,6 +11,7 @@ @AllArgsConstructor public enum ErrorCode { + ALREADY_INVITED(BAD_REQUEST, "이미 초대한 이메일 입니다."), ALREADY_INVITED_MEMBER(BAD_REQUEST, "이미 존재하는 팀원입니다."), NOT_MATCHED_MEMBER_INFORM(BAD_REQUEST, "일치하지 않은 초대정보 입니다."), INVALID_TEAM_INVITATION(NOT_FOUND, "존재하지 않거나 만료된 초대정보입니다."); diff --git a/src/main/java/com/tiki/server/email/teaminvitation/repository/TeamInvitationRepository.java b/src/main/java/com/tiki/server/email/teaminvitation/repository/TeamInvitationRepository.java index e49ac1fb..34ee703d 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/repository/TeamInvitationRepository.java +++ b/src/main/java/com/tiki/server/email/teaminvitation/repository/TeamInvitationRepository.java @@ -1,6 +1,8 @@ package com.tiki.server.email.teaminvitation.repository; +import com.tiki.server.email.Email; import com.tiki.server.email.teaminvitation.entity.TeamInvitation; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import java.time.LocalDate; @@ -11,4 +13,6 @@ public interface TeamInvitationRepository extends JpaRepository findByExpiredDateBefore(final LocalDate expiredDate); List findAllByTeamId(final long teamId); + + Optional findByTeamIdAndEmail(final long teamId, final Email email); }