From 60480da94d099aee142d6ecf3f9967194803fc7a Mon Sep 17 00:00:00 2001 From: smg0725 Date: Sun, 23 Mar 2025 18:26:15 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[CHORE]=20jpa=EB=A5=BC=20redis=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/common/handler/ErrorHandler.java | 2 +- .../email/emailsender/entity/MailSender.java | 4 +- .../service/EmailSenderService.java | 18 +++---- .../adapter/TeamInvitationDeleter.java | 23 --------- .../adapter/TeamInvitationFinder.java | 39 --------------- .../adapter/TeamInvitationSaver.java | 18 ------- .../teaminvitation/entity/TeamInvitation.java | 47 ------------------- .../repository/TeamInvitationRepository.java | 18 ------- .../scheduler/TeamInvitationScheduler.java | 28 ----------- .../dto/TeamInvitationEmailGetResponse.java | 13 ----- .../adapter/TeamInvitationDeleter.java | 17 +++++++ .../adapter/TeamInvitationFinder.java | 31 ++++++++++++ .../adapter/TeamInvitationSaver.java | 18 +++++++ .../controller/TeamInvitationController.java | 30 ++++++------ .../teaminvitation/entity/Invitation.java | 42 +++++++++++++++++ .../exception/TeamInvitationException.java | 4 +- .../teaminvitation/messages/ErrorCode.java | 2 +- .../messages/SuccessMessage.java | 2 +- .../repository/InvitationRepository.java | 15 ++++++ .../service/TeamInvitationService.java | 47 +++++++++---------- .../dto/TeamInvitationEmailGetResponse.java | 12 +++++ .../dto/TeamInvitationEmailsGetResponse.java | 8 ++-- .../dto/TeamInvitationInformGetResponse.java | 6 +-- 23 files changed, 196 insertions(+), 248 deletions(-) delete mode 100644 src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationDeleter.java delete mode 100644 src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationFinder.java delete mode 100644 src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationSaver.java delete mode 100644 src/main/java/com/tiki/server/email/teaminvitation/entity/TeamInvitation.java delete mode 100644 src/main/java/com/tiki/server/email/teaminvitation/repository/TeamInvitationRepository.java delete mode 100644 src/main/java/com/tiki/server/email/teaminvitation/scheduler/TeamInvitationScheduler.java delete mode 100644 src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java create mode 100644 src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java create mode 100644 src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java create mode 100644 src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java rename src/main/java/com/tiki/server/{email => }/teaminvitation/controller/TeamInvitationController.java (65%) create mode 100644 src/main/java/com/tiki/server/teaminvitation/entity/Invitation.java rename src/main/java/com/tiki/server/{email => }/teaminvitation/exception/TeamInvitationException.java (72%) rename src/main/java/com/tiki/server/{email => }/teaminvitation/messages/ErrorCode.java (92%) rename src/main/java/com/tiki/server/{email => }/teaminvitation/messages/SuccessMessage.java (89%) create mode 100644 src/main/java/com/tiki/server/teaminvitation/repository/InvitationRepository.java rename src/main/java/com/tiki/server/{email => }/teaminvitation/service/TeamInvitationService.java (66%) create mode 100644 src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java rename src/main/java/com/tiki/server/{email => }/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java (68%) rename src/main/java/com/tiki/server/{email => }/teaminvitation/service/dto/TeamInvitationInformGetResponse.java (77%) diff --git a/src/main/java/com/tiki/server/common/handler/ErrorHandler.java b/src/main/java/com/tiki/server/common/handler/ErrorHandler.java index 6f6eca5d..74affef4 100644 --- a/src/main/java/com/tiki/server/common/handler/ErrorHandler.java +++ b/src/main/java/com/tiki/server/common/handler/ErrorHandler.java @@ -4,7 +4,7 @@ import com.tiki.server.common.dto.ErrorCodeResponse; import com.tiki.server.common.exception.TikiException; import com.tiki.server.email.emailsender.exception.EmailSenderException; -import com.tiki.server.email.teaminvitation.exception.TeamInvitationException; +import com.tiki.server.teaminvitation.exception.TeamInvitationException; import com.tiki.server.email.verification.exception.EmailVerificationException; import com.tiki.server.folder.exception.FolderException; import com.tiki.server.note.exception.NoteException; 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 4f61d02e..4b48d6ad 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 long invitationId + final String invitationId ) { Map map = new HashMap<>(); map.put("teamId", String.format("%d", teamId)); - map.put("invitationId", String.format("%d", invitationId)); + map.put("invitationId", 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 bd6e64f8..338ced91 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,16 +1,16 @@ package com.tiki.server.email.emailsender.service; -import static com.tiki.server.email.teaminvitation.messages.ErrorCode.ALREADY_INVITED; +import static com.tiki.server.teaminvitation.messages.ErrorCode.ALREADY_INVITED; import static com.tiki.server.memberteammanager.message.ErrorCode.CONFLICT_TEAM_MEMBER; import com.tiki.server.common.entity.Position; import com.tiki.server.email.emailsender.entity.MailSender; import com.tiki.server.email.emailsender.service.dto.EmailServiceRequest; import com.tiki.server.email.emailsender.service.dto.TeamInvitationCreateServiceRequest; -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.teaminvitation.adapter.TeamInvitationFinder; +import com.tiki.server.teaminvitation.adapter.TeamInvitationSaver; +import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.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; @@ -67,19 +67,19 @@ public void createTeamInvitation(final TeamInvitationCreateServiceRequest reques Team team = teamFinder.findById(request.teamId()); checkIsPresentTeamMember(request); checkDuplicateInvitation(request); - TeamInvitation teamInvitation = teamInvitationSaver.createTeamInvitation( - TeamInvitation.of(memberTeamManager.getName(), request.teamId(), request.targetEmail())); + Invitation invitation = teamInvitationSaver.createTeamInvitation( + Invitation.of(memberTeamManager.getName(), request.teamId(), request.targetEmail())); mailSender.sendTeamInvitationMail( request.targetEmail().getEmail(), memberTeamManager.getName(), team.getName(), request.teamId(), - teamInvitation.getId() + invitation.getId() ); } private void checkDuplicateInvitation(final TeamInvitationCreateServiceRequest request) { - teamInvitationFinder.presentByTeamIdAndEmail(request.teamId(), request.targetEmail() + teamInvitationFinder.findById(request.teamId() + request.targetEmail().getEmail() ) .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 deleted file mode 100644 index a35f779c..00000000 --- a/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationDeleter.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.tiki.server.email.teaminvitation.adapter; - -import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.email.teaminvitation.entity.TeamInvitation; -import com.tiki.server.email.teaminvitation.repository.TeamInvitationRepository; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@RepositoryAdapter -@RequiredArgsConstructor -public class TeamInvitationDeleter { - - private final TeamInvitationRepository teamInvitationRepository; - - 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 deleted file mode 100644 index 2edcab0d..00000000 --- a/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationFinder.java +++ /dev/null @@ -1,39 +0,0 @@ -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 -@RequiredArgsConstructor -public class TeamInvitationFinder { - - private final TeamInvitationRepository teamInvitationRepository; - - public TeamInvitation findByInvitationId(final long invitationId) { - return teamInvitationRepository.findById(invitationId) - .orElseThrow(() -> new TeamInvitationException(INVALID_TEAM_INVITATION)); - } - - public List findByExpiredDate(final LocalDate expiredDate) { - return teamInvitationRepository.findByExpiredDateBefore(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/adapter/TeamInvitationSaver.java b/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationSaver.java deleted file mode 100644 index 714cd13c..00000000 --- a/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationSaver.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.tiki.server.email.teaminvitation.adapter; - - -import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.email.teaminvitation.entity.TeamInvitation; -import com.tiki.server.email.teaminvitation.repository.TeamInvitationRepository; -import lombok.RequiredArgsConstructor; - -@RepositoryAdapter -@RequiredArgsConstructor -public class TeamInvitationSaver { - - private final TeamInvitationRepository teamInvitationRepository; - - public TeamInvitation createTeamInvitation(final TeamInvitation teamInvitation){ - return teamInvitationRepository.save(teamInvitation); - } -} 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 deleted file mode 100644 index 68187b59..00000000 --- a/src/main/java/com/tiki/server/email/teaminvitation/entity/TeamInvitation.java +++ /dev/null @@ -1,47 +0,0 @@ -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 lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -import java.time.LocalDate; - -@Getter -@Entity -@Builder -@NoArgsConstructor(access = PROTECTED) -@AllArgsConstructor(access = PRIVATE) -public class TeamInvitation extends BaseTime { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "invitation_id") - private Long id; - - private String sender; - - private long teamId; - - private Email email; - - private LocalDate expiredDate; - - public static TeamInvitation of(final String sender, final long teamId, final Email email) { - return TeamInvitation.builder().sender(sender).teamId(teamId).email(email).expiredDate(LocalDate.now()).build(); - } - - 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 deleted file mode 100644 index 34ee703d..00000000 --- a/src/main/java/com/tiki/server/email/teaminvitation/repository/TeamInvitationRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -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; -import java.util.List; - -public interface TeamInvitationRepository extends JpaRepository { - - List findByExpiredDateBefore(final LocalDate expiredDate); - - List findAllByTeamId(final long teamId); - - 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 deleted file mode 100644 index 7f1f4ef1..00000000 --- a/src/main/java/com/tiki/server/email/teaminvitation/scheduler/TeamInvitationScheduler.java +++ /dev/null @@ -1,28 +0,0 @@ -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/dto/TeamInvitationEmailGetResponse.java b/src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java deleted file mode 100644 index 10a9eb45..00000000 --- a/src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.tiki.server.email.teaminvitation.service.dto; - -import com.tiki.server.email.Email; -import com.tiki.server.email.teaminvitation.entity.TeamInvitation; -import jakarta.validation.constraints.NotNull; - -public record TeamInvitationEmailGetResponse( - @NotNull String email -) { - public static TeamInvitationEmailGetResponse from(final TeamInvitation teamInvitation) { - return new TeamInvitationEmailGetResponse(teamInvitation.getEmailToString()); - } -} diff --git a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java new file mode 100644 index 00000000..49e92e86 --- /dev/null +++ b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java @@ -0,0 +1,17 @@ +package com.tiki.server.teaminvitation.adapter; + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.teaminvitation.repository.InvitationRepository; +import lombok.RequiredArgsConstructor; + +@RepositoryAdapter +@RequiredArgsConstructor +public class TeamInvitationDeleter { + + private final InvitationRepository invitationRepository; + + public void deleteTeamInvitation(final Invitation invitation) { + invitationRepository.delete(invitation); + } +} diff --git a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java new file mode 100644 index 00000000..101ae1db --- /dev/null +++ b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java @@ -0,0 +1,31 @@ +package com.tiki.server.teaminvitation.adapter; + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.teaminvitation.exception.TeamInvitationException; +import com.tiki.server.teaminvitation.repository.InvitationRepository; +import com.tiki.server.teaminvitation.messages.ErrorCode; +import java.util.Optional; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@RepositoryAdapter +@RequiredArgsConstructor +public class TeamInvitationFinder { + + private final InvitationRepository invitationRepository; + + public Invitation findByInvitationId(final String invitationId) { + return invitationRepository.findById(invitationId) + .orElseThrow(() -> new TeamInvitationException(ErrorCode.INVALID_TEAM_INVITATION)); + } + + public List findAllByIdStartingWith(final String teamId) { + return invitationRepository.findAllByIdStartingWith(teamId); + } + + public Optional findById(final String id) { + return invitationRepository.findById (id); + } +} diff --git a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java new file mode 100644 index 00000000..71e65b46 --- /dev/null +++ b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java @@ -0,0 +1,18 @@ +package com.tiki.server.teaminvitation.adapter; + + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.teaminvitation.repository.InvitationRepository; +import lombok.RequiredArgsConstructor; + +@RepositoryAdapter +@RequiredArgsConstructor +public class TeamInvitationSaver { + + private final InvitationRepository invitationRepository; + + public Invitation createTeamInvitation(final Invitation invitation){ + return invitationRepository.save(invitation); + } +} diff --git a/src/main/java/com/tiki/server/email/teaminvitation/controller/TeamInvitationController.java b/src/main/java/com/tiki/server/teaminvitation/controller/TeamInvitationController.java similarity index 65% rename from src/main/java/com/tiki/server/email/teaminvitation/controller/TeamInvitationController.java rename to src/main/java/com/tiki/server/teaminvitation/controller/TeamInvitationController.java index 0eba6296..30bbbe37 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/controller/TeamInvitationController.java +++ b/src/main/java/com/tiki/server/teaminvitation/controller/TeamInvitationController.java @@ -1,11 +1,11 @@ -package com.tiki.server.email.teaminvitation.controller; - -import static com.tiki.server.email.teaminvitation.messages.SuccessMessage.*; +package com.tiki.server.teaminvitation.controller; import com.tiki.server.common.dto.SuccessResponse; -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 com.tiki.server.teaminvitation.service.TeamInvitationService; +import com.tiki.server.teaminvitation.service.dto.TeamInvitationEmailsGetResponse; +import com.tiki.server.teaminvitation.service.dto.TeamInvitationInformGetResponse; +import com.tiki.server.teaminvitation.messages.SuccessMessage; +import lombok.NonNull; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; @@ -27,28 +27,28 @@ public SuccessResponse getTeamInvitation( ) { long memberId = Long.parseLong(principal.getName()); TeamInvitationEmailsGetResponse response = teamInvitationService.getInvitations(memberId, teamId); - return SuccessResponse.success(GET_TEAM_INVITATIONS.getMessage(), response); + return SuccessResponse.success(SuccessMessage.GET_TEAM_INVITATIONS.getMessage(), response); } @ResponseStatus(HttpStatus.OK) @DeleteMapping("/team/{teamId}") public SuccessResponse deleteTeamInvitationFromAdmin( final Principal principal, - @RequestParam final long invitationId, + @RequestParam @NonNull final String invitationId, @PathVariable final long teamId ) { long memberId = Long.parseLong(principal.getName()); teamInvitationService.deleteTeamInvitationFromAdmin(memberId, teamId, invitationId); - return SuccessResponse.success(DELETE_TEAM_INVITATION_FROM_ADMIN.getMessage()); + return SuccessResponse.success(SuccessMessage.DELETE_TEAM_INVITATION_FROM_ADMIN.getMessage()); } @ResponseStatus(HttpStatus.OK) @GetMapping public SuccessResponse getInvitationInform( - @RequestParam final long invitationId + @RequestParam @NonNull final String invitationId ) { TeamInvitationInformGetResponse response = teamInvitationService.getInvitationInform(invitationId); - return SuccessResponse.success(GET_TEAM_INVITATION_INFORM.getMessage(), response); + return SuccessResponse.success(SuccessMessage.GET_TEAM_INVITATION_INFORM.getMessage(), response); } @ResponseStatus(HttpStatus.CREATED) @@ -56,21 +56,21 @@ public SuccessResponse getInvitationInform( public SuccessResponse createTeamMemberFromInvitation( Principal principal, @RequestParam final long teamId, - @RequestParam final long teamInvitationId + @RequestParam @NonNull final String teamInvitationId ) { long memberId = Long.parseLong(principal.getName()); teamInvitationService.createTeamMemberFromInvitation(memberId, teamId, teamInvitationId); - return SuccessResponse.success(CREATE_TEAM_MEMBER_FROM_INVITATION.getMessage()); + return SuccessResponse.success(SuccessMessage.CREATE_TEAM_MEMBER_FROM_INVITATION.getMessage()); } @ResponseStatus(HttpStatus.OK) @DeleteMapping public SuccessResponse deleteTeamInvitationFromUser( Principal principal, - @RequestParam final long invitationId + @RequestParam @NonNull final String invitationId ) { long memberId = Long.parseLong(principal.getName()); teamInvitationService.deleteTeamInvitation(memberId, invitationId); - return SuccessResponse.success(DELETE_TEAM_INVITATION_FROM_USER.getMessage()); + return SuccessResponse.success(SuccessMessage.DELETE_TEAM_INVITATION_FROM_USER.getMessage()); } } diff --git a/src/main/java/com/tiki/server/teaminvitation/entity/Invitation.java b/src/main/java/com/tiki/server/teaminvitation/entity/Invitation.java new file mode 100644 index 00000000..0cdd0f03 --- /dev/null +++ b/src/main/java/com/tiki/server/teaminvitation/entity/Invitation.java @@ -0,0 +1,42 @@ +package com.tiki.server.teaminvitation.entity; + +import static jakarta.persistence.GenerationType.IDENTITY; +import static lombok.AccessLevel.PRIVATE; + +import com.tiki.server.common.entity.BaseTime; +import com.tiki.server.email.Email; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import java.time.LocalDate; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import org.springframework.data.redis.core.RedisHash; + +@Getter +@Builder(access = PRIVATE) +@AllArgsConstructor(access = PRIVATE) +@RedisHash(value = "Invitation", timeToLive = 604800) +public class Invitation extends BaseTime { + + @Id + @GeneratedValue(strategy = IDENTITY) + private String id; + + private String sender; + + private long teamId; + + private Email email; + + private LocalDate expiredDate; + + public static Invitation of(final String sender, final long teamId, final Email email) { + return Invitation.builder().id(teamId + email.getEmail()).sender(sender).teamId(teamId).email(email) + .expiredDate(LocalDate.now()).build(); + } + + public String getEmailToString() { + return email.getEmail(); + } +} diff --git a/src/main/java/com/tiki/server/email/teaminvitation/exception/TeamInvitationException.java b/src/main/java/com/tiki/server/teaminvitation/exception/TeamInvitationException.java similarity index 72% rename from src/main/java/com/tiki/server/email/teaminvitation/exception/TeamInvitationException.java rename to src/main/java/com/tiki/server/teaminvitation/exception/TeamInvitationException.java index 25117f71..5fe61ab6 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/exception/TeamInvitationException.java +++ b/src/main/java/com/tiki/server/teaminvitation/exception/TeamInvitationException.java @@ -1,6 +1,6 @@ -package com.tiki.server.email.teaminvitation.exception; +package com.tiki.server.teaminvitation.exception; -import com.tiki.server.email.teaminvitation.messages.ErrorCode; +import com.tiki.server.teaminvitation.messages.ErrorCode; import lombok.Getter; @Getter diff --git a/src/main/java/com/tiki/server/email/teaminvitation/messages/ErrorCode.java b/src/main/java/com/tiki/server/teaminvitation/messages/ErrorCode.java similarity index 92% rename from src/main/java/com/tiki/server/email/teaminvitation/messages/ErrorCode.java rename to src/main/java/com/tiki/server/teaminvitation/messages/ErrorCode.java index d4fdcb22..acf2b675 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/messages/ErrorCode.java +++ b/src/main/java/com/tiki/server/teaminvitation/messages/ErrorCode.java @@ -1,4 +1,4 @@ -package com.tiki.server.email.teaminvitation.messages; +package com.tiki.server.teaminvitation.messages; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/tiki/server/email/teaminvitation/messages/SuccessMessage.java b/src/main/java/com/tiki/server/teaminvitation/messages/SuccessMessage.java similarity index 89% rename from src/main/java/com/tiki/server/email/teaminvitation/messages/SuccessMessage.java rename to src/main/java/com/tiki/server/teaminvitation/messages/SuccessMessage.java index 6e08b6f0..b5541311 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/messages/SuccessMessage.java +++ b/src/main/java/com/tiki/server/teaminvitation/messages/SuccessMessage.java @@ -1,4 +1,4 @@ -package com.tiki.server.email.teaminvitation.messages; +package com.tiki.server.teaminvitation.messages; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/tiki/server/teaminvitation/repository/InvitationRepository.java b/src/main/java/com/tiki/server/teaminvitation/repository/InvitationRepository.java new file mode 100644 index 00000000..2d28f388 --- /dev/null +++ b/src/main/java/com/tiki/server/teaminvitation/repository/InvitationRepository.java @@ -0,0 +1,15 @@ +package com.tiki.server.teaminvitation.repository; + +import com.tiki.server.teaminvitation.entity.Invitation; +import java.util.List; +import java.util.Optional; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface InvitationRepository extends CrudRepository { + + List findAllByIdStartingWith(final String teamId); + + Optional findById (final String id); +} diff --git a/src/main/java/com/tiki/server/email/teaminvitation/service/TeamInvitationService.java b/src/main/java/com/tiki/server/teaminvitation/service/TeamInvitationService.java similarity index 66% rename from src/main/java/com/tiki/server/email/teaminvitation/service/TeamInvitationService.java rename to src/main/java/com/tiki/server/teaminvitation/service/TeamInvitationService.java index 0594e10b..7a338826 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/service/TeamInvitationService.java +++ b/src/main/java/com/tiki/server/teaminvitation/service/TeamInvitationService.java @@ -1,12 +1,12 @@ -package com.tiki.server.email.teaminvitation.service; +package com.tiki.server.teaminvitation.service; import com.tiki.server.common.entity.Position; -import com.tiki.server.email.teaminvitation.exception.TeamInvitationException; -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 com.tiki.server.email.teaminvitation.service.dto.TeamInvitationEmailsGetResponse; -import com.tiki.server.email.teaminvitation.service.dto.TeamInvitationInformGetResponse; +import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.teaminvitation.exception.TeamInvitationException; +import com.tiki.server.teaminvitation.adapter.TeamInvitationDeleter; +import com.tiki.server.teaminvitation.adapter.TeamInvitationFinder; +import com.tiki.server.teaminvitation.service.dto.TeamInvitationEmailsGetResponse; +import com.tiki.server.teaminvitation.service.dto.TeamInvitationInformGetResponse; import com.tiki.server.external.util.AwsHandler; import com.tiki.server.member.adapter.MemberFinder; import com.tiki.server.member.entity.Member; @@ -17,14 +17,13 @@ import com.tiki.server.team.dto.response.TeamResponse; import com.tiki.server.team.entity.Team; import com.tiki.server.team.exception.TeamException; +import com.tiki.server.teaminvitation.messages.ErrorCode; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; import org.springframework.transaction.annotation.Transactional; -import static com.tiki.server.email.teaminvitation.messages.ErrorCode.ALREADY_INVITED_MEMBER; -import static com.tiki.server.email.teaminvitation.messages.ErrorCode.NOT_MATCHED_MEMBER_INFORM; import static com.tiki.server.team.message.ErrorCode.EXCEED_TEAM_NUMBER; @Service @@ -39,34 +38,34 @@ public class TeamInvitationService { private final MemberFinder memberFinder; private final AwsHandler awsHandler; - public TeamInvitationInformGetResponse getInvitationInform(final long invitationId) { - TeamInvitation invitation = teamInvitationFinder.findByInvitationId(invitationId); + public TeamInvitationInformGetResponse getInvitationInform(final String invitationId) { + Invitation invitation = teamInvitationFinder.findByInvitationId(invitationId); Team team = teamFinder.findById(invitation.getTeamId()); TeamResponse response = TeamResponse.createWithIcon(team, awsHandler.getDownloadPreSignedUrl(team.getIconImageKey())); return TeamInvitationInformGetResponse.of(invitation, response); } @Transactional - public void createTeamMemberFromInvitation(final long memberId, final long teamId, final long invitationId) { + public void createTeamMemberFromInvitation(final long memberId, final long teamId, final String invitationId) { checkIsPresentTeamMember(memberId, teamId); Member member = memberFinder.findById(memberId); checkTeamNumber(memberId); Team team = teamFinder.findById(teamId); - TeamInvitation invitation = teamInvitationFinder.findByInvitationId(invitationId); + Invitation invitation = teamInvitationFinder.findByInvitationId(invitationId); checkMemberMatched(invitation, member); memberTeamManagerSaver.save(MemberTeamManager.of(member, team, Position.EXECUTIVE)); teamInvitationDeleter.deleteTeamInvitation(invitation); } - public void deleteTeamInvitationFromAdmin(final long memberId, final long teamId, final long invitationId) { + public void deleteTeamInvitationFromAdmin(final long memberId, final long teamId, final String invitationId) { MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); memberTeamManager.checkMemberAccessible(Position.ADMIN); - TeamInvitation teamInvitation = teamInvitationFinder.findByInvitationId(invitationId); - teamInvitationDeleter.deleteTeamInvitation(teamInvitation); + Invitation invitation = teamInvitationFinder.findByInvitationId(invitationId); + teamInvitationDeleter.deleteTeamInvitation(invitation); } - public void deleteTeamInvitation(final long memberId, final long invitationId) { - TeamInvitation invitation = teamInvitationFinder.findByInvitationId(invitationId); + public void deleteTeamInvitation(final long memberId, final String invitationId) { + Invitation invitation = teamInvitationFinder.findByInvitationId(invitationId); Member member = memberFinder.findById(memberId); checkMemberMatched(invitation, member); teamInvitationDeleter.deleteTeamInvitation(invitation); @@ -76,19 +75,19 @@ public void deleteTeamInvitation(final long memberId, final long invitationId) { public TeamInvitationEmailsGetResponse getInvitations(final long memberId, final long teamId) { MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); memberTeamManager.checkMemberAccessible(Position.ADMIN); - List teamInvitations = teamInvitationFinder.findAllByTeamId(teamId); - return TeamInvitationEmailsGetResponse.from(teamInvitations); + List invitations = teamInvitationFinder.findAllByIdStartingWith(String.valueOf(teamId)); + return TeamInvitationEmailsGetResponse.from(invitations); } - private void checkMemberMatched(TeamInvitation teamInvitation, Member member) { - if (!teamInvitation.getEmail().equals(member.getEmail())) { - throw new TeamInvitationException(NOT_MATCHED_MEMBER_INFORM); + private void checkMemberMatched(Invitation invitation, Member member) { + if (!invitation.getEmail().equals(member.getEmail())) { + throw new TeamInvitationException(ErrorCode.NOT_MATCHED_MEMBER_INFORM); } } private void checkIsPresentTeamMember(long memberId, long teamId) { if (memberTeamManagerFinder.checkIsPresent(memberId, teamId)) { - throw new TeamInvitationException(ALREADY_INVITED_MEMBER); + throw new TeamInvitationException(ErrorCode.ALREADY_INVITED_MEMBER); } } diff --git a/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java new file mode 100644 index 00000000..2fd34d51 --- /dev/null +++ b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java @@ -0,0 +1,12 @@ +package com.tiki.server.teaminvitation.service.dto; + +import com.tiki.server.teaminvitation.entity.Invitation; +import jakarta.validation.constraints.NotNull; + +public record TeamInvitationEmailGetResponse( + @NotNull String email +) { + public static TeamInvitationEmailGetResponse from(final Invitation invitation) { + return new TeamInvitationEmailGetResponse(invitation.getEmailToString()); + } +} diff --git a/src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java similarity index 68% rename from src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java rename to src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java index 7852449d..bb97c6d3 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java +++ b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java @@ -1,6 +1,6 @@ -package com.tiki.server.email.teaminvitation.service.dto; +package com.tiki.server.teaminvitation.service.dto; -import com.tiki.server.email.teaminvitation.entity.TeamInvitation; +import com.tiki.server.teaminvitation.entity.Invitation; import jakarta.validation.constraints.NotNull; import java.util.List; @@ -8,9 +8,9 @@ public record TeamInvitationEmailsGetResponse( @NotNull List teamInvitationEmailGetResponses ) { - public static TeamInvitationEmailsGetResponse from(final List teamInvitations) { + public static TeamInvitationEmailsGetResponse from(final List invitations) { return new TeamInvitationEmailsGetResponse( - teamInvitations.stream() + invitations.stream() .map(TeamInvitationEmailGetResponse::from) .toList()); } diff --git a/src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationInformGetResponse.java b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationInformGetResponse.java similarity index 77% rename from src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationInformGetResponse.java rename to src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationInformGetResponse.java index 497da7de..a20af57d 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationInformGetResponse.java +++ b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationInformGetResponse.java @@ -1,6 +1,6 @@ -package com.tiki.server.email.teaminvitation.service.dto; +package com.tiki.server.teaminvitation.service.dto; -import com.tiki.server.email.teaminvitation.entity.TeamInvitation; +import com.tiki.server.teaminvitation.entity.Invitation; import com.tiki.server.team.dto.response.TeamResponse; import jakarta.validation.constraints.NotNull; @@ -12,7 +12,7 @@ public record TeamInvitationInformGetResponse( ) { public static TeamInvitationInformGetResponse of( - final TeamInvitation invitation, + final Invitation invitation, final TeamResponse team ) { return new TeamInvitationInformGetResponse( From db0b5cbcd1446e45776b820c518bb4ecae1d7174 Mon Sep 17 00:00:00 2001 From: smg0725 Date: Sun, 23 Mar 2025 18:53:02 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[CHORE]=20redis=20Repository=20=EB=A7=88?= =?UTF-8?q?=EC=BB=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../token/repository/TokenRepository.java | 7 ++-- .../common/config/JpaAuditingConfig.java | 11 +++++++ .../server/common/config/RedisConfig.java | 11 ++++++- .../common/support/RedisRepository.java | 12 +++++++ .../service/EmailSenderService.java | 8 ++--- .../domain/EmailVerification.java | 3 +- .../EmailVerificationRepository.java | 7 ++-- .../adapter/TeamInvitationDeleter.java | 10 +++--- .../adapter/TeamInvitationFinder.java | 18 +++++------ .../adapter/TeamInvitationSaver.java | 10 +++--- .../{Invitation.java => TeamInvitation.java} | 11 ++++--- .../repository/InvitationRepository.java | 15 --------- .../repository/TeamInvitationRepository.java | 16 ++++++++++ .../service/TeamInvitationService.java | 32 +++++++++---------- .../dto/TeamInvitationEmailGetResponse.java | 6 ++-- .../dto/TeamInvitationEmailsGetResponse.java | 6 ++-- .../dto/TeamInvitationInformGetResponse.java | 6 ++-- 17 files changed, 111 insertions(+), 78 deletions(-) create mode 100644 src/main/java/com/tiki/server/common/support/RedisRepository.java rename src/main/java/com/tiki/server/teaminvitation/entity/{Invitation.java => TeamInvitation.java} (69%) delete mode 100644 src/main/java/com/tiki/server/teaminvitation/repository/InvitationRepository.java create mode 100644 src/main/java/com/tiki/server/teaminvitation/repository/TeamInvitationRepository.java diff --git a/src/main/java/com/tiki/server/auth/token/repository/TokenRepository.java b/src/main/java/com/tiki/server/auth/token/repository/TokenRepository.java index 048413ff..07fb26d1 100644 --- a/src/main/java/com/tiki/server/auth/token/repository/TokenRepository.java +++ b/src/main/java/com/tiki/server/auth/token/repository/TokenRepository.java @@ -1,12 +1,11 @@ package com.tiki.server.auth.token.repository; import com.tiki.server.auth.token.entity.Token; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - +import com.tiki.server.common.support.RedisRepository; import java.util.Optional; +import org.springframework.data.repository.CrudRepository; -@Repository +@RedisRepository public interface TokenRepository extends CrudRepository { Optional findById(final long id); diff --git a/src/main/java/com/tiki/server/common/config/JpaAuditingConfig.java b/src/main/java/com/tiki/server/common/config/JpaAuditingConfig.java index b3df4190..f173c206 100644 --- a/src/main/java/com/tiki/server/common/config/JpaAuditingConfig.java +++ b/src/main/java/com/tiki/server/common/config/JpaAuditingConfig.java @@ -1,9 +1,20 @@ package com.tiki.server.common.config; +import com.tiki.server.common.support.RedisRepository; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @Configuration @EnableJpaAuditing +@EnableJpaRepositories( + basePackages = "com.tiki.server", + excludeFilters = @ComponentScan.Filter( + type = FilterType.ANNOTATION, + value = RedisRepository.class + ) +) public class JpaAuditingConfig { } diff --git a/src/main/java/com/tiki/server/common/config/RedisConfig.java b/src/main/java/com/tiki/server/common/config/RedisConfig.java index ccde4c63..b4462d4d 100644 --- a/src/main/java/com/tiki/server/common/config/RedisConfig.java +++ b/src/main/java/com/tiki/server/common/config/RedisConfig.java @@ -1,8 +1,11 @@ package com.tiki.server.common.config; +import com.tiki.server.common.support.RedisRepository; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; @@ -12,7 +15,13 @@ import java.util.Map; @Configuration -@EnableRedisRepositories +@EnableRedisRepositories( + basePackages = "com.tiki.server", + includeFilters = @ComponentScan.Filter( + type = FilterType.ANNOTATION, + value = RedisRepository.class + ) +) public class RedisConfig { @Value("${REDIS.host}") diff --git a/src/main/java/com/tiki/server/common/support/RedisRepository.java b/src/main/java/com/tiki/server/common/support/RedisRepository.java new file mode 100644 index 00000000..5a55d60f --- /dev/null +++ b/src/main/java/com/tiki/server/common/support/RedisRepository.java @@ -0,0 +1,12 @@ +package com.tiki.server.common.support; + + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface RedisRepository { +} 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 338ced91..be8b2b83 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 @@ -9,7 +9,7 @@ import com.tiki.server.email.emailsender.service.dto.TeamInvitationCreateServiceRequest; import com.tiki.server.teaminvitation.adapter.TeamInvitationFinder; import com.tiki.server.teaminvitation.adapter.TeamInvitationSaver; -import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.teaminvitation.entity.TeamInvitation; import com.tiki.server.teaminvitation.exception.TeamInvitationException; import com.tiki.server.email.verification.adapter.EmailVerificationSaver; import com.tiki.server.email.verification.domain.EmailVerification; @@ -67,14 +67,14 @@ public void createTeamInvitation(final TeamInvitationCreateServiceRequest reques Team team = teamFinder.findById(request.teamId()); checkIsPresentTeamMember(request); checkDuplicateInvitation(request); - Invitation invitation = teamInvitationSaver.createTeamInvitation( - Invitation.of(memberTeamManager.getName(), request.teamId(), request.targetEmail())); + TeamInvitation teamInvitation = teamInvitationSaver.createTeamInvitation( + TeamInvitation.of(memberTeamManager.getName(), request.teamId(), request.targetEmail())); mailSender.sendTeamInvitationMail( request.targetEmail().getEmail(), memberTeamManager.getName(), team.getName(), request.teamId(), - invitation.getId() + teamInvitation.getId() ); } diff --git a/src/main/java/com/tiki/server/email/verification/domain/EmailVerification.java b/src/main/java/com/tiki/server/email/verification/domain/EmailVerification.java index b448b9d5..d0e33dd7 100644 --- a/src/main/java/com/tiki/server/email/verification/domain/EmailVerification.java +++ b/src/main/java/com/tiki/server/email/verification/domain/EmailVerification.java @@ -2,10 +2,11 @@ import com.tiki.server.email.Email; import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import org.springframework.data.annotation.Id; import org.springframework.data.redis.core.RedisHash; import static jakarta.persistence.GenerationType.IDENTITY; diff --git a/src/main/java/com/tiki/server/email/verification/repository/EmailVerificationRepository.java b/src/main/java/com/tiki/server/email/verification/repository/EmailVerificationRepository.java index 8d3cae9c..3172b8d7 100644 --- a/src/main/java/com/tiki/server/email/verification/repository/EmailVerificationRepository.java +++ b/src/main/java/com/tiki/server/email/verification/repository/EmailVerificationRepository.java @@ -1,12 +1,11 @@ package com.tiki.server.email.verification.repository; +import com.tiki.server.common.support.RedisRepository; import com.tiki.server.email.verification.domain.EmailVerification; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - import java.util.Optional; +import org.springframework.data.repository.CrudRepository; -@Repository +@RedisRepository public interface EmailVerificationRepository extends CrudRepository { Optional findById(final String email); diff --git a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java index 49e92e86..d33c2f0b 100644 --- a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java +++ b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java @@ -1,17 +1,17 @@ package com.tiki.server.teaminvitation.adapter; import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.teaminvitation.entity.Invitation; -import com.tiki.server.teaminvitation.repository.InvitationRepository; +import com.tiki.server.teaminvitation.entity.TeamInvitation; +import com.tiki.server.teaminvitation.repository.TeamInvitationRepository; import lombok.RequiredArgsConstructor; @RepositoryAdapter @RequiredArgsConstructor public class TeamInvitationDeleter { - private final InvitationRepository invitationRepository; + private final TeamInvitationRepository teamInvitationRepository; - public void deleteTeamInvitation(final Invitation invitation) { - invitationRepository.delete(invitation); + public void deleteTeamInvitation(final TeamInvitation teamInvitation) { + teamInvitationRepository.delete(teamInvitation); } } diff --git a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java index 101ae1db..8d5582d0 100644 --- a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java +++ b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java @@ -1,9 +1,9 @@ package com.tiki.server.teaminvitation.adapter; import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.teaminvitation.entity.TeamInvitation; import com.tiki.server.teaminvitation.exception.TeamInvitationException; -import com.tiki.server.teaminvitation.repository.InvitationRepository; +import com.tiki.server.teaminvitation.repository.TeamInvitationRepository; import com.tiki.server.teaminvitation.messages.ErrorCode; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -14,18 +14,18 @@ @RequiredArgsConstructor public class TeamInvitationFinder { - private final InvitationRepository invitationRepository; + private final TeamInvitationRepository teamInvitationRepository; - public Invitation findByInvitationId(final String invitationId) { - return invitationRepository.findById(invitationId) + public TeamInvitation findByInvitationId(final String invitationId) { + return teamInvitationRepository.findById(invitationId) .orElseThrow(() -> new TeamInvitationException(ErrorCode.INVALID_TEAM_INVITATION)); } - public List findAllByIdStartingWith(final String teamId) { - return invitationRepository.findAllByIdStartingWith(teamId); + public List findAllByIdStartingWith(final String teamId) { + return teamInvitationRepository.findAllByIdStartingWith(teamId); } - public Optional findById(final String id) { - return invitationRepository.findById (id); + public Optional findById(final String id) { + return teamInvitationRepository.findById (id); } } diff --git a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java index 71e65b46..624ab69c 100644 --- a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java +++ b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java @@ -2,17 +2,17 @@ import com.tiki.server.common.support.RepositoryAdapter; -import com.tiki.server.teaminvitation.entity.Invitation; -import com.tiki.server.teaminvitation.repository.InvitationRepository; +import com.tiki.server.teaminvitation.entity.TeamInvitation; +import com.tiki.server.teaminvitation.repository.TeamInvitationRepository; import lombok.RequiredArgsConstructor; @RepositoryAdapter @RequiredArgsConstructor public class TeamInvitationSaver { - private final InvitationRepository invitationRepository; + private final TeamInvitationRepository teamInvitationRepository; - public Invitation createTeamInvitation(final Invitation invitation){ - return invitationRepository.save(invitation); + public TeamInvitation createTeamInvitation(final TeamInvitation teamInvitation){ + return teamInvitationRepository.save(teamInvitation); } } diff --git a/src/main/java/com/tiki/server/teaminvitation/entity/Invitation.java b/src/main/java/com/tiki/server/teaminvitation/entity/TeamInvitation.java similarity index 69% rename from src/main/java/com/tiki/server/teaminvitation/entity/Invitation.java rename to src/main/java/com/tiki/server/teaminvitation/entity/TeamInvitation.java index 0cdd0f03..26630877 100644 --- a/src/main/java/com/tiki/server/teaminvitation/entity/Invitation.java +++ b/src/main/java/com/tiki/server/teaminvitation/entity/TeamInvitation.java @@ -6,18 +6,19 @@ import com.tiki.server.common.entity.BaseTime; import com.tiki.server.email.Email; import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; + import java.time.LocalDate; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import org.springframework.data.annotation.Id; import org.springframework.data.redis.core.RedisHash; @Getter @Builder(access = PRIVATE) @AllArgsConstructor(access = PRIVATE) -@RedisHash(value = "Invitation", timeToLive = 604800) -public class Invitation extends BaseTime { +@RedisHash(value = "TeamInvitation", timeToLive = 604800) +public class TeamInvitation extends BaseTime { @Id @GeneratedValue(strategy = IDENTITY) @@ -31,8 +32,8 @@ public class Invitation extends BaseTime { private LocalDate expiredDate; - public static Invitation of(final String sender, final long teamId, final Email email) { - return Invitation.builder().id(teamId + email.getEmail()).sender(sender).teamId(teamId).email(email) + 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(); } diff --git a/src/main/java/com/tiki/server/teaminvitation/repository/InvitationRepository.java b/src/main/java/com/tiki/server/teaminvitation/repository/InvitationRepository.java deleted file mode 100644 index 2d28f388..00000000 --- a/src/main/java/com/tiki/server/teaminvitation/repository/InvitationRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.tiki.server.teaminvitation.repository; - -import com.tiki.server.teaminvitation.entity.Invitation; -import java.util.List; -import java.util.Optional; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface InvitationRepository extends CrudRepository { - - List findAllByIdStartingWith(final String teamId); - - Optional findById (final String id); -} diff --git a/src/main/java/com/tiki/server/teaminvitation/repository/TeamInvitationRepository.java b/src/main/java/com/tiki/server/teaminvitation/repository/TeamInvitationRepository.java new file mode 100644 index 00000000..d92e4ccf --- /dev/null +++ b/src/main/java/com/tiki/server/teaminvitation/repository/TeamInvitationRepository.java @@ -0,0 +1,16 @@ +package com.tiki.server.teaminvitation.repository; + +import com.tiki.server.common.support.RedisRepository; +import com.tiki.server.teaminvitation.entity.TeamInvitation; +import java.util.List; +import java.util.Optional; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@RedisRepository +public interface TeamInvitationRepository extends CrudRepository { + + List findAllByIdStartingWith(final String teamId); + + Optional findById (final String id); +} diff --git a/src/main/java/com/tiki/server/teaminvitation/service/TeamInvitationService.java b/src/main/java/com/tiki/server/teaminvitation/service/TeamInvitationService.java index 7a338826..cb6e572a 100644 --- a/src/main/java/com/tiki/server/teaminvitation/service/TeamInvitationService.java +++ b/src/main/java/com/tiki/server/teaminvitation/service/TeamInvitationService.java @@ -1,7 +1,7 @@ package com.tiki.server.teaminvitation.service; import com.tiki.server.common.entity.Position; -import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.teaminvitation.entity.TeamInvitation; import com.tiki.server.teaminvitation.exception.TeamInvitationException; import com.tiki.server.teaminvitation.adapter.TeamInvitationDeleter; import com.tiki.server.teaminvitation.adapter.TeamInvitationFinder; @@ -39,10 +39,10 @@ public class TeamInvitationService { private final AwsHandler awsHandler; public TeamInvitationInformGetResponse getInvitationInform(final String invitationId) { - Invitation invitation = teamInvitationFinder.findByInvitationId(invitationId); - Team team = teamFinder.findById(invitation.getTeamId()); + TeamInvitation teamInvitation = teamInvitationFinder.findByInvitationId(invitationId); + Team team = teamFinder.findById(teamInvitation.getTeamId()); TeamResponse response = TeamResponse.createWithIcon(team, awsHandler.getDownloadPreSignedUrl(team.getIconImageKey())); - return TeamInvitationInformGetResponse.of(invitation, response); + return TeamInvitationInformGetResponse.of(teamInvitation, response); } @Transactional @@ -51,36 +51,36 @@ public void createTeamMemberFromInvitation(final long memberId, final long teamI Member member = memberFinder.findById(memberId); checkTeamNumber(memberId); Team team = teamFinder.findById(teamId); - Invitation invitation = teamInvitationFinder.findByInvitationId(invitationId); - checkMemberMatched(invitation, member); + TeamInvitation teamInvitation = teamInvitationFinder.findByInvitationId(invitationId); + checkMemberMatched(teamInvitation, member); memberTeamManagerSaver.save(MemberTeamManager.of(member, team, Position.EXECUTIVE)); - teamInvitationDeleter.deleteTeamInvitation(invitation); + teamInvitationDeleter.deleteTeamInvitation(teamInvitation); } public void deleteTeamInvitationFromAdmin(final long memberId, final long teamId, final String invitationId) { MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); memberTeamManager.checkMemberAccessible(Position.ADMIN); - Invitation invitation = teamInvitationFinder.findByInvitationId(invitationId); - teamInvitationDeleter.deleteTeamInvitation(invitation); + TeamInvitation teamInvitation = teamInvitationFinder.findByInvitationId(invitationId); + teamInvitationDeleter.deleteTeamInvitation(teamInvitation); } public void deleteTeamInvitation(final long memberId, final String invitationId) { - Invitation invitation = teamInvitationFinder.findByInvitationId(invitationId); + TeamInvitation teamInvitation = teamInvitationFinder.findByInvitationId(invitationId); Member member = memberFinder.findById(memberId); - checkMemberMatched(invitation, member); - teamInvitationDeleter.deleteTeamInvitation(invitation); + checkMemberMatched(teamInvitation, member); + teamInvitationDeleter.deleteTeamInvitation(teamInvitation); } @Transactional(readOnly = true) public TeamInvitationEmailsGetResponse getInvitations(final long memberId, final long teamId) { MemberTeamManager memberTeamManager = memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); memberTeamManager.checkMemberAccessible(Position.ADMIN); - List invitations = teamInvitationFinder.findAllByIdStartingWith(String.valueOf(teamId)); - return TeamInvitationEmailsGetResponse.from(invitations); + List teamInvitations = teamInvitationFinder.findAllByIdStartingWith(String.valueOf(teamId)); + return TeamInvitationEmailsGetResponse.from(teamInvitations); } - private void checkMemberMatched(Invitation invitation, Member member) { - if (!invitation.getEmail().equals(member.getEmail())) { + private void checkMemberMatched(TeamInvitation teamInvitation, Member member) { + if (!teamInvitation.getEmail().equals(member.getEmail())) { throw new TeamInvitationException(ErrorCode.NOT_MATCHED_MEMBER_INFORM); } } diff --git a/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java index 2fd34d51..13dff081 100644 --- a/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java +++ b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java @@ -1,12 +1,12 @@ package com.tiki.server.teaminvitation.service.dto; -import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.teaminvitation.entity.TeamInvitation; import jakarta.validation.constraints.NotNull; public record TeamInvitationEmailGetResponse( @NotNull String email ) { - public static TeamInvitationEmailGetResponse from(final Invitation invitation) { - return new TeamInvitationEmailGetResponse(invitation.getEmailToString()); + public static TeamInvitationEmailGetResponse from(final TeamInvitation teamInvitation) { + return new TeamInvitationEmailGetResponse(teamInvitation.getEmailToString()); } } diff --git a/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java index bb97c6d3..7d555a6c 100644 --- a/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java +++ b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailsGetResponse.java @@ -1,6 +1,6 @@ package com.tiki.server.teaminvitation.service.dto; -import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.teaminvitation.entity.TeamInvitation; import jakarta.validation.constraints.NotNull; import java.util.List; @@ -8,9 +8,9 @@ public record TeamInvitationEmailsGetResponse( @NotNull List teamInvitationEmailGetResponses ) { - public static TeamInvitationEmailsGetResponse from(final List invitations) { + public static TeamInvitationEmailsGetResponse from(final List teamInvitations) { return new TeamInvitationEmailsGetResponse( - invitations.stream() + teamInvitations.stream() .map(TeamInvitationEmailGetResponse::from) .toList()); } diff --git a/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationInformGetResponse.java b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationInformGetResponse.java index a20af57d..10e82c45 100644 --- a/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationInformGetResponse.java +++ b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationInformGetResponse.java @@ -1,6 +1,6 @@ package com.tiki.server.teaminvitation.service.dto; -import com.tiki.server.teaminvitation.entity.Invitation; +import com.tiki.server.teaminvitation.entity.TeamInvitation; import com.tiki.server.team.dto.response.TeamResponse; import jakarta.validation.constraints.NotNull; @@ -12,11 +12,11 @@ public record TeamInvitationInformGetResponse( ) { public static TeamInvitationInformGetResponse of( - final Invitation invitation, + final TeamInvitation teamInvitation, final TeamResponse team ) { return new TeamInvitationInformGetResponse( - invitation.getSender(), + teamInvitation.getSender(), team.name(), team.iconImageUrl(), team.teamId() From 8297a9236f881e965ce08dc45373695c4588d988 Mon Sep 17 00:00:00 2001 From: paragon0107 Date: Wed, 26 Mar 2025 10:57:29 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[CHORE]=20=EC=BB=A8=EB=B2=A4=EC=85=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/teaminvitation/adapter/TeamInvitationFinder.java | 6 +++--- .../teaminvitation/repository/TeamInvitationRepository.java | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java index 8d5582d0..de8bb45e 100644 --- a/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java +++ b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java @@ -3,12 +3,12 @@ import com.tiki.server.common.support.RepositoryAdapter; import com.tiki.server.teaminvitation.entity.TeamInvitation; import com.tiki.server.teaminvitation.exception.TeamInvitationException; -import com.tiki.server.teaminvitation.repository.TeamInvitationRepository; import com.tiki.server.teaminvitation.messages.ErrorCode; -import java.util.Optional; +import com.tiki.server.teaminvitation.repository.TeamInvitationRepository; import lombok.RequiredArgsConstructor; import java.util.List; +import java.util.Optional; @RepositoryAdapter @RequiredArgsConstructor @@ -26,6 +26,6 @@ public List findAllByIdStartingWith(final String teamId) { } public Optional findById(final String id) { - return teamInvitationRepository.findById (id); + return teamInvitationRepository.findById(id); } } diff --git a/src/main/java/com/tiki/server/teaminvitation/repository/TeamInvitationRepository.java b/src/main/java/com/tiki/server/teaminvitation/repository/TeamInvitationRepository.java index d92e4ccf..bbd55976 100644 --- a/src/main/java/com/tiki/server/teaminvitation/repository/TeamInvitationRepository.java +++ b/src/main/java/com/tiki/server/teaminvitation/repository/TeamInvitationRepository.java @@ -2,8 +2,10 @@ import com.tiki.server.common.support.RedisRepository; import com.tiki.server.teaminvitation.entity.TeamInvitation; + import java.util.List; import java.util.Optional; + import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; @@ -12,5 +14,5 @@ public interface TeamInvitationRepository extends CrudRepository findAllByIdStartingWith(final String teamId); - Optional findById (final String id); + Optional findById(final String id); } From d7df24ec8b81d0911b48c21932aa72a31169a9cc Mon Sep 17 00:00:00 2001 From: paragon0107 Date: Wed, 26 Mar 2025 17:46:31 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[CHORE]=20jpa=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/tiki/server/teaminvitation/entity/TeamInvitation.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/tiki/server/teaminvitation/entity/TeamInvitation.java b/src/main/java/com/tiki/server/teaminvitation/entity/TeamInvitation.java index 26630877..37368f7b 100644 --- a/src/main/java/com/tiki/server/teaminvitation/entity/TeamInvitation.java +++ b/src/main/java/com/tiki/server/teaminvitation/entity/TeamInvitation.java @@ -21,7 +21,6 @@ public class TeamInvitation extends BaseTime { @Id - @GeneratedValue(strategy = IDENTITY) private String id; private String sender;