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/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/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/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..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 @@ -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.TeamInvitation; +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; @@ -79,7 +79,7 @@ public void createTeamInvitation(final TeamInvitationCreateServiceRequest reques } 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/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/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/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/email/teaminvitation/adapter/TeamInvitationDeleter.java b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java similarity index 51% rename from src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationDeleter.java rename to src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java index a35f779c..d33c2f0b 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationDeleter.java +++ b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationDeleter.java @@ -1,12 +1,10 @@ -package com.tiki.server.email.teaminvitation.adapter; +package com.tiki.server.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 com.tiki.server.teaminvitation.entity.TeamInvitation; +import com.tiki.server.teaminvitation.repository.TeamInvitationRepository; import lombok.RequiredArgsConstructor; -import java.util.List; - @RepositoryAdapter @RequiredArgsConstructor public class TeamInvitationDeleter { @@ -16,8 +14,4 @@ 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/teaminvitation/adapter/TeamInvitationFinder.java b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationFinder.java new file mode 100644 index 00000000..de8bb45e --- /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.TeamInvitation; +import com.tiki.server.teaminvitation.exception.TeamInvitationException; +import com.tiki.server.teaminvitation.messages.ErrorCode; +import com.tiki.server.teaminvitation.repository.TeamInvitationRepository; +import lombok.RequiredArgsConstructor; + +import java.util.List; +import java.util.Optional; + +@RepositoryAdapter +@RequiredArgsConstructor +public class TeamInvitationFinder { + + private final TeamInvitationRepository teamInvitationRepository; + + public TeamInvitation findByInvitationId(final String invitationId) { + return teamInvitationRepository.findById(invitationId) + .orElseThrow(() -> new TeamInvitationException(ErrorCode.INVALID_TEAM_INVITATION)); + } + + public List findAllByIdStartingWith(final String teamId) { + return teamInvitationRepository.findAllByIdStartingWith(teamId); + } + + public Optional findById(final String id) { + return teamInvitationRepository.findById(id); + } +} diff --git a/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationSaver.java b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java similarity index 66% rename from src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationSaver.java rename to src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java index 714cd13c..624ab69c 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/adapter/TeamInvitationSaver.java +++ b/src/main/java/com/tiki/server/teaminvitation/adapter/TeamInvitationSaver.java @@ -1,9 +1,9 @@ -package com.tiki.server.email.teaminvitation.adapter; +package com.tiki.server.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 com.tiki.server.teaminvitation.entity.TeamInvitation; +import com.tiki.server.teaminvitation.repository.TeamInvitationRepository; import lombok.RequiredArgsConstructor; @RepositoryAdapter 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/email/teaminvitation/entity/TeamInvitation.java b/src/main/java/com/tiki/server/teaminvitation/entity/TeamInvitation.java similarity index 51% rename from src/main/java/com/tiki/server/email/teaminvitation/entity/TeamInvitation.java rename to src/main/java/com/tiki/server/teaminvitation/entity/TeamInvitation.java index 68187b59..37368f7b 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/entity/TeamInvitation.java +++ b/src/main/java/com/tiki/server/teaminvitation/entity/TeamInvitation.java @@ -1,33 +1,27 @@ -package com.tiki.server.email.teaminvitation.entity; +package com.tiki.server.teaminvitation.entity; +import static jakarta.persistence.GenerationType.IDENTITY; 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 lombok.NoArgsConstructor; - -import java.time.LocalDate; +import org.springframework.data.annotation.Id; +import org.springframework.data.redis.core.RedisHash; @Getter -@Entity -@Builder -@NoArgsConstructor(access = PROTECTED) +@Builder(access = PRIVATE) @AllArgsConstructor(access = PRIVATE) +@RedisHash(value = "TeamInvitation", timeToLive = 604800) public class TeamInvitation extends BaseTime { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "invitation_id") - private Long id; + private String id; private String sender; @@ -38,10 +32,11 @@ public class TeamInvitation extends BaseTime { 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(); + return TeamInvitation.builder().id(teamId + email.getEmail()).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/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/TeamInvitationRepository.java b/src/main/java/com/tiki/server/teaminvitation/repository/TeamInvitationRepository.java new file mode 100644 index 00000000..bbd55976 --- /dev/null +++ b/src/main/java/com/tiki/server/teaminvitation/repository/TeamInvitationRepository.java @@ -0,0 +1,18 @@ +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/email/teaminvitation/service/TeamInvitationService.java b/src/main/java/com/tiki/server/teaminvitation/service/TeamInvitationService.java similarity index 67% 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..cb6e572a 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.TeamInvitation; +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,56 +38,56 @@ public class TeamInvitationService { private final MemberFinder memberFinder; private final AwsHandler awsHandler; - public TeamInvitationInformGetResponse getInvitationInform(final long invitationId) { - TeamInvitation invitation = teamInvitationFinder.findByInvitationId(invitationId); - Team team = teamFinder.findById(invitation.getTeamId()); + public TeamInvitationInformGetResponse getInvitationInform(final String invitationId) { + 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 - 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); - 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 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); } - public void deleteTeamInvitation(final long memberId, final long invitationId) { - TeamInvitation invitation = teamInvitationFinder.findByInvitationId(invitationId); + public void deleteTeamInvitation(final long memberId, final String 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 teamInvitations = teamInvitationFinder.findAllByTeamId(teamId); + List teamInvitations = teamInvitationFinder.findAllByIdStartingWith(String.valueOf(teamId)); return TeamInvitationEmailsGetResponse.from(teamInvitations); } private void checkMemberMatched(TeamInvitation teamInvitation, Member member) { if (!teamInvitation.getEmail().equals(member.getEmail())) { - throw new TeamInvitationException(NOT_MATCHED_MEMBER_INFORM); + 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/email/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java similarity index 66% rename from src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java rename to src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java index 10a9eb45..13dff081 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java +++ b/src/main/java/com/tiki/server/teaminvitation/service/dto/TeamInvitationEmailGetResponse.java @@ -1,7 +1,6 @@ -package com.tiki.server.email.teaminvitation.service.dto; +package com.tiki.server.teaminvitation.service.dto; -import com.tiki.server.email.Email; -import com.tiki.server.email.teaminvitation.entity.TeamInvitation; +import com.tiki.server.teaminvitation.entity.TeamInvitation; import jakarta.validation.constraints.NotNull; public record TeamInvitationEmailGetResponse( 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 80% 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..7d555a6c 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.TeamInvitation; import jakarta.validation.constraints.NotNull; import java.util.List; 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 72% 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..10e82c45 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.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 TeamInvitation invitation, + final TeamInvitation teamInvitation, final TeamResponse team ) { return new TeamInvitationInformGetResponse( - invitation.getSender(), + teamInvitation.getSender(), team.name(), team.iconImageUrl(), team.teamId()