diff --git a/src/main/java/com/tiki/server/auth/dto/response/SignInGetResponse.java b/src/main/java/com/tiki/server/auth/dto/response/SignInGetResponse.java index 7c47539b..b19b7d4a 100644 --- a/src/main/java/com/tiki/server/auth/dto/response/SignInGetResponse.java +++ b/src/main/java/com/tiki/server/auth/dto/response/SignInGetResponse.java @@ -11,7 +11,7 @@ public record SignInGetResponse( @NotNull String refreshToken ) { - public static SignInGetResponse from(final String accessToken, final String refreshToken) { + public static SignInGetResponse of(final String accessToken, final String refreshToken) { return SignInGetResponse.builder().accessToken(accessToken).refreshToken(refreshToken).build(); } } diff --git a/src/main/java/com/tiki/server/auth/service/AuthService.java b/src/main/java/com/tiki/server/auth/service/AuthService.java index e669d88f..40a82a77 100644 --- a/src/main/java/com/tiki/server/auth/service/AuthService.java +++ b/src/main/java/com/tiki/server/auth/service/AuthService.java @@ -50,7 +50,7 @@ public SignInGetResponse signIn(final SignInRequest request) { String accessToken = jwtGenerator.generateAccessToken(authentication); String refreshToken = jwtGenerator.generateRefreshToken(authentication); tokenSaver.save(Token.of(member.getId(), refreshToken)); - return SignInGetResponse.from(accessToken, refreshToken); + return SignInGetResponse.of(accessToken, refreshToken); } public ReissueGetResponse reissueToken(final HttpServletRequest request) { diff --git a/src/main/java/com/tiki/server/document/adapter/DeletedDocumentAdapter.java b/src/main/java/com/tiki/server/document/adapter/DeletedDocumentAdapter.java index 334ada86..791d25a1 100644 --- a/src/main/java/com/tiki/server/document/adapter/DeletedDocumentAdapter.java +++ b/src/main/java/com/tiki/server/document/adapter/DeletedDocumentAdapter.java @@ -2,6 +2,7 @@ import static com.tiki.server.document.message.ErrorCode.INVALID_DOCUMENT; +import java.time.LocalDate; import java.util.List; import com.tiki.server.common.support.RepositoryAdapter; @@ -40,6 +41,10 @@ public void deleteAllByTeamId(final long teamId) { deletedDocumentRepository.deleteAllByTeamId(teamId); } + public List getExpiredDeletedDocuments(final LocalDate date) { + return deletedDocumentRepository.findAllByDate(date); + } + private DeletedDocument create(final Document document) { return DeletedDocument.of(document); } diff --git a/src/main/java/com/tiki/server/document/constants/DocumentConstants.java b/src/main/java/com/tiki/server/document/constants/DocumentConstants.java new file mode 100644 index 00000000..2894924a --- /dev/null +++ b/src/main/java/com/tiki/server/document/constants/DocumentConstants.java @@ -0,0 +1,6 @@ +package com.tiki.server.document.constants; + +public class DocumentConstants { + + public static final int TRASH_RETENTION_DAYS = 30; +} diff --git a/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java b/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java index e5ec516e..8aa1492e 100644 --- a/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java +++ b/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java @@ -1,9 +1,11 @@ package com.tiki.server.document.repository; +import java.time.LocalDate; import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import com.tiki.server.document.entity.DeletedDocument; @@ -14,4 +16,7 @@ public interface DeletedDocumentRepository extends JpaRepository findAllByTeamId(final long teamId); void deleteAllByTeamId(final long teamId); + + @Query("SELECT d FROM DeletedDocument d WHERE d.createdAt < :date") + List findAllByDate(final LocalDate date); } diff --git a/src/main/java/com/tiki/server/document/scheduler/DeletedDocumentTrashScheduler.java b/src/main/java/com/tiki/server/document/scheduler/DeletedDocumentTrashScheduler.java new file mode 100644 index 00000000..62a8cb24 --- /dev/null +++ b/src/main/java/com/tiki/server/document/scheduler/DeletedDocumentTrashScheduler.java @@ -0,0 +1,31 @@ +package com.tiki.server.document.scheduler; + +import static com.tiki.server.document.constants.DocumentConstants.TRASH_RETENTION_DAYS; + +import java.time.LocalDate; +import java.util.List; + +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import com.tiki.server.document.adapter.DeletedDocumentAdapter; +import com.tiki.server.document.entity.DeletedDocument; +import com.tiki.server.external.util.AwsHandler; + +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class DeletedDocumentTrashScheduler { + + private final DeletedDocumentAdapter deletedDocumentAdapter; + private final AwsHandler awsHandler; + + @Scheduled(cron = "0 10 0 * * ?") + public void clearDeletedDocuments() { + LocalDate targetDate = LocalDate.now().minusDays(TRASH_RETENTION_DAYS); + List documents = deletedDocumentAdapter.getExpiredDeletedDocuments(targetDate); + documents.forEach(document -> awsHandler.deleteFile(document.getFileKey())); + deletedDocumentAdapter.deleteAll(documents); + } +} 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 index 18bce060..7f1f4ef1 100644 --- a/src/main/java/com/tiki/server/email/teaminvitation/scheduler/TeamInvitationScheduler.java +++ b/src/main/java/com/tiki/server/email/teaminvitation/scheduler/TeamInvitationScheduler.java @@ -5,10 +5,12 @@ 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 {