From 02319022261caee2ea24993f9cc6e3f8c2ec7306 Mon Sep 17 00:00:00 2001 From: smg0725 Date: Sun, 23 Mar 2025 19:21:48 +0900 Subject: [PATCH] Revert problematic commits --- .../email/emailsender/entity/MailSender.java | 4 +-- .../service/EmailSenderService.java | 2 +- .../adapter/TeamInvitationDeleter.java | 4 +++ .../adapter/TeamInvitationFinder.java | 16 +++++++---- .../controller/TeamInvitationController.java | 9 +++--- .../teaminvitation/entity/TeamInvitation.java | 19 ++++++++----- .../repository/TeamInvitationRepository.java | 15 ++++++---- .../scheduler/TeamInvitationScheduler.java | 28 +++++++++++++++++++ .../service/TeamInvitationService.java | 10 +++---- 9 files changed, 77 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/tiki/server/email/teaminvitation/scheduler/TeamInvitationScheduler.java diff --git a/src/main/java/com/tiki/server/email/emailsender/entity/MailSender.java b/src/main/java/com/tiki/server/email/emailsender/entity/MailSender.java index 4b48d6ad..4f61d02e 100644 --- a/src/main/java/com/tiki/server/email/emailsender/entity/MailSender.java +++ b/src/main/java/com/tiki/server/email/emailsender/entity/MailSender.java @@ -44,11 +44,11 @@ public void sendTeamInvitationMail( final String senderName, final String teamName, final long teamId, - final String invitationId + final long invitationId ) { Map map = new HashMap<>(); map.put("teamId", String.format("%d", teamId)); - map.put("invitationId", invitationId); + map.put("invitationId", String.format("%d", invitationId)); map.put("teamName", teamName); map.put("senderName", senderName); MimeMessage message = makeMessage(email, MAIL_INVITE_TEAM_MEMBER, INVITE_TEAM_MEMBER_TEMPLATE_NAME, map); 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 6272c76a..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 @@ -79,7 +79,7 @@ public void createTeamInvitation(final TeamInvitationCreateServiceRequest reques } private void checkDuplicateInvitation(final TeamInvitationCreateServiceRequest request) { - teamInvitationFinder.presentById(request.teamId() + request.targetEmail().getEmail() + teamInvitationFinder.presentByTeamIdAndEmail(request.teamId(), request.targetEmail() ) .ifPresent(invitation -> { throw new TeamInvitationException(ALREADY_INVITED); diff --git a/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationDeleter.java b/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationDeleter.java index 8250d556..a35f779c 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationDeleter.java +++ b/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationDeleter.java @@ -16,4 +16,8 @@ public class TeamInvitationDeleter { public void deleteTeamInvitation(final TeamInvitation teamInvitation) { teamInvitationRepository.delete(teamInvitation); } + + public void deleteAll(final List expiredInvitation) { + teamInvitationRepository.deleteAll(expiredInvitation); + } } 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 01749678..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,6 +1,7 @@ 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; @@ -10,6 +11,7 @@ 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 @@ -18,16 +20,20 @@ public class TeamInvitationFinder { private final TeamInvitationRepository teamInvitationRepository; - public TeamInvitation findByInvitationId(final String invitationId) { + public TeamInvitation findByInvitationId(final long invitationId) { return teamInvitationRepository.findById(invitationId) .orElseThrow(() -> new TeamInvitationException(INVALID_TEAM_INVITATION)); } - public List findAllByIdStartingWith(final String teamId) { - return teamInvitationRepository.findAllByIdStartingWith(teamId); + public List findByExpiredDate(final LocalDate expiredDate) { + return teamInvitationRepository.findByExpiredDateBefore(expiredDate); } - public Optional presentById(final String id) { - return teamInvitationRepository.presentById(id); + 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/controller/TeamInvitationController.java b/src/main/java/com/tiki/server/email/teaminvitation/controller/TeamInvitationController.java index db983728..0eba6296 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/controller/TeamInvitationController.java +++ b/src/main/java/com/tiki/server/email/teaminvitation/controller/TeamInvitationController.java @@ -6,7 +6,6 @@ import com.tiki.server.email.teaminvitation.service.TeamInvitationService; import com.tiki.server.email.teaminvitation.service.dto.TeamInvitationEmailsGetResponse; import com.tiki.server.email.teaminvitation.service.dto.TeamInvitationInformGetResponse; -import lombok.NonNull; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; @@ -35,7 +34,7 @@ public SuccessResponse getTeamInvitation( @DeleteMapping("/team/{teamId}") public SuccessResponse deleteTeamInvitationFromAdmin( final Principal principal, - @RequestParam @NonNull final String invitationId, + @RequestParam final long invitationId, @PathVariable final long teamId ) { long memberId = Long.parseLong(principal.getName()); @@ -46,7 +45,7 @@ public SuccessResponse deleteTeamInvitationFromAdmin( @ResponseStatus(HttpStatus.OK) @GetMapping public SuccessResponse getInvitationInform( - @RequestParam @NonNull final String invitationId + @RequestParam final long invitationId ) { TeamInvitationInformGetResponse response = teamInvitationService.getInvitationInform(invitationId); return SuccessResponse.success(GET_TEAM_INVITATION_INFORM.getMessage(), response); @@ -57,7 +56,7 @@ public SuccessResponse getInvitationInform( public SuccessResponse createTeamMemberFromInvitation( Principal principal, @RequestParam final long teamId, - @RequestParam @NonNull final String teamInvitationId + @RequestParam final long teamInvitationId ) { long memberId = Long.parseLong(principal.getName()); teamInvitationService.createTeamMemberFromInvitation(memberId, teamId, teamInvitationId); @@ -68,7 +67,7 @@ public SuccessResponse createTeamMemberFromInvitation( @DeleteMapping public SuccessResponse deleteTeamInvitationFromUser( Principal principal, - @RequestParam @NonNull final String invitationId + @RequestParam final long invitationId ) { long memberId = Long.parseLong(principal.getName()); teamInvitationService.deleteTeamInvitation(memberId, invitationId); diff --git a/src/main/java/com/tiki/server/email/teaminvitation/entity/TeamInvitation.java b/src/main/java/com/tiki/server/email/teaminvitation/entity/TeamInvitation.java index 48a0bee9..68187b59 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/entity/TeamInvitation.java +++ b/src/main/java/com/tiki/server/email/teaminvitation/entity/TeamInvitation.java @@ -1,27 +1,33 @@ package com.tiki.server.email.teaminvitation.entity; import static lombok.AccessLevel.PRIVATE; +import static lombok.AccessLevel.PROTECTED; import com.tiki.server.common.entity.BaseTime; import com.tiki.server.email.Email; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import java.time.LocalDate; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import org.springframework.data.redis.core.RedisHash; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; @Getter +@Entity @Builder +@NoArgsConstructor(access = PROTECTED) @AllArgsConstructor(access = PRIVATE) -@RedisHash(value = "TeamInvitation", timeToLive = 604800) public class TeamInvitation extends BaseTime { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private String id; + @Column(name = "invitation_id") + private Long id; private String sender; @@ -32,11 +38,10 @@ public class TeamInvitation extends BaseTime { private LocalDate expiredDate; public static TeamInvitation of(final String sender, final long teamId, final Email email) { - return TeamInvitation.builder().id(teamId + email.getEmail()).sender(sender).teamId(teamId).email(email) - .expiredDate(LocalDate.now()).build(); + return TeamInvitation.builder().sender(sender).teamId(teamId).email(email).expiredDate(LocalDate.now()).build(); } - public String getEmailToString() { + public String getEmailToString(){ return email.getEmail(); } } 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 06e3c6a7..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,13 +1,18 @@ package com.tiki.server.email.teaminvitation.repository; +import com.tiki.server.email.Email; import com.tiki.server.email.teaminvitation.entity.TeamInvitation; -import java.util.List; import java.util.Optional; -import org.springframework.data.repository.CrudRepository; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.time.LocalDate; +import java.util.List; + +public interface TeamInvitationRepository extends JpaRepository { -public interface TeamInvitationRepository extends CrudRepository { + List findByExpiredDateBefore(final LocalDate expiredDate); - List findAllByIdStartingWith(final String teamId); + List findAllByTeamId(final long teamId); - Optional presentById(final String id); + Optional findByTeamIdAndEmail(final long teamId, final Email email); } diff --git a/src/main/java/com/tiki/server/email/teaminvitation/scheduler/TeamInvitationScheduler.java b/src/main/java/com/tiki/server/email/teaminvitation/scheduler/TeamInvitationScheduler.java new file mode 100644 index 00000000..7f1f4ef1 --- /dev/null +++ b/src/main/java/com/tiki/server/email/teaminvitation/scheduler/TeamInvitationScheduler.java @@ -0,0 +1,28 @@ +package com.tiki.server.email.teaminvitation.scheduler; + +import com.tiki.server.email.teaminvitation.adapter.TeamInvitationDeleter; +import com.tiki.server.email.teaminvitation.adapter.TeamInvitationFinder; +import com.tiki.server.email.teaminvitation.entity.TeamInvitation; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.util.List; + +@Component +@RequiredArgsConstructor +public class TeamInvitationScheduler { + + private final TeamInvitationDeleter teamInvitationDeleter; + private final TeamInvitationFinder teamInvitationFinder; + + @Scheduled(cron = "0 0 0 * * ?") + public void cleanUpExpiredInvites() { + LocalDate now = LocalDate.now(); + List expiredInvites = teamInvitationFinder.findByExpiredDate(now); + if (!expiredInvites.isEmpty()) { + teamInvitationDeleter.deleteAll(expiredInvites); + } + } +} diff --git a/src/main/java/com/tiki/server/email/teaminvitation/service/TeamInvitationService.java b/src/main/java/com/tiki/server/email/teaminvitation/service/TeamInvitationService.java index 1c6be24d..0594e10b 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/service/TeamInvitationService.java +++ b/src/main/java/com/tiki/server/email/teaminvitation/service/TeamInvitationService.java @@ -39,7 +39,7 @@ public class TeamInvitationService { private final MemberFinder memberFinder; private final AwsHandler awsHandler; - public TeamInvitationInformGetResponse getInvitationInform(final String invitationId) { + public TeamInvitationInformGetResponse getInvitationInform(final long invitationId) { TeamInvitation invitation = teamInvitationFinder.findByInvitationId(invitationId); Team team = teamFinder.findById(invitation.getTeamId()); TeamResponse response = TeamResponse.createWithIcon(team, awsHandler.getDownloadPreSignedUrl(team.getIconImageKey())); @@ -47,7 +47,7 @@ public TeamInvitationInformGetResponse getInvitationInform(final String invitati } @Transactional - public void createTeamMemberFromInvitation(final long memberId, final long teamId, final String invitationId) { + public void createTeamMemberFromInvitation(final long memberId, final long teamId, final long invitationId) { checkIsPresentTeamMember(memberId, teamId); Member member = memberFinder.findById(memberId); checkTeamNumber(memberId); @@ -58,14 +58,14 @@ public void createTeamMemberFromInvitation(final long memberId, final long teamI teamInvitationDeleter.deleteTeamInvitation(invitation); } - public void deleteTeamInvitationFromAdmin(final long memberId, final long teamId, final String invitationId) { + public void deleteTeamInvitationFromAdmin(final long memberId, final long teamId, final long invitationId) { MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); memberTeamManager.checkMemberAccessible(Position.ADMIN); TeamInvitation teamInvitation = teamInvitationFinder.findByInvitationId(invitationId); teamInvitationDeleter.deleteTeamInvitation(teamInvitation); } - public void deleteTeamInvitation(final long memberId, final String invitationId) { + public void deleteTeamInvitation(final long memberId, final long invitationId) { TeamInvitation invitation = teamInvitationFinder.findByInvitationId(invitationId); Member member = memberFinder.findById(memberId); checkMemberMatched(invitation, member); @@ -76,7 +76,7 @@ public void deleteTeamInvitation(final long memberId, final String invitationId) public TeamInvitationEmailsGetResponse getInvitations(final long memberId, final long teamId) { MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); memberTeamManager.checkMemberAccessible(Position.ADMIN); - List teamInvitations = teamInvitationFinder.findAllByIdStartingWith(String.valueOf(teamId)); + List teamInvitations = teamInvitationFinder.findAllByTeamId(teamId); return TeamInvitationEmailsGetResponse.from(teamInvitations); }