From f19eac7beb94cdc90cb682d3ef98097b286f383c Mon Sep 17 00:00:00 2001 From: BAEK0111 Date: Sun, 22 Feb 2026 14:48:35 +0900 Subject: [PATCH] =?UTF-8?q?refactor/#249=20-=20Paper=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=EB=A5=BC=20=EA=B2=80=EC=82=AC=ED=95=B4=EC=84=9C=20=EB=A7=A4?= =?UTF-8?q?=EC=9D=BC=20=EB=B0=A4=2012=EC=8B=9C=EC=97=90=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=ED=95=98=EB=8F=84=EB=A1=9D=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 --- .../repository/PaperRepository.java | 12 ++++++++++ .../service/PaperQueryService.java | 1 + .../service/PaperQueryServiceImpl.java | 24 ++++++++++++------- .../partnership/service/PaperScheduler.java | 20 ++++++++++++++++ 4 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/assu/server/domain/partnership/service/PaperScheduler.java diff --git a/src/main/java/com/assu/server/domain/partnership/repository/PaperRepository.java b/src/main/java/com/assu/server/domain/partnership/repository/PaperRepository.java index 670d951d..60098687 100644 --- a/src/main/java/com/assu/server/domain/partnership/repository/PaperRepository.java +++ b/src/main/java/com/assu/server/domain/partnership/repository/PaperRepository.java @@ -8,6 +8,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -75,4 +76,15 @@ List findActivePapersByAdminIds(@Param("adminIds") List adminIds, """) List findLatestPapersByStoreIds(@Param("storeIds") List storeIds); + @Modifying + @Query(""" + UPDATE Paper p + SET p.isActivated = :inactiveStatus + WHERE p.partnershipPeriodEnd < :today + AND p.isActivated = :activeStatus + """) + void updatePaperStatus(@Param("today") LocalDate today, + @Param("inactiveStatus") ActivationStatus inactiveStatus, + @Param("activeStatus") ActivationStatus activeStatus); + } diff --git a/src/main/java/com/assu/server/domain/partnership/service/PaperQueryService.java b/src/main/java/com/assu/server/domain/partnership/service/PaperQueryService.java index bc2aa2a2..796d715e 100644 --- a/src/main/java/com/assu/server/domain/partnership/service/PaperQueryService.java +++ b/src/main/java/com/assu/server/domain/partnership/service/PaperQueryService.java @@ -5,4 +5,5 @@ public interface PaperQueryService { PaperResponseDTO getStorePaperContent(Long storeId, Member member); + void updatePaperStatus(); } \ No newline at end of file diff --git a/src/main/java/com/assu/server/domain/partnership/service/PaperQueryServiceImpl.java b/src/main/java/com/assu/server/domain/partnership/service/PaperQueryServiceImpl.java index 7e4e1df9..52f36d2a 100644 --- a/src/main/java/com/assu/server/domain/partnership/service/PaperQueryServiceImpl.java +++ b/src/main/java/com/assu/server/domain/partnership/service/PaperQueryServiceImpl.java @@ -1,17 +1,10 @@ package com.assu.server.domain.partnership.service; -import static com.assu.server.domain.partnership.dto.PaperContentResponseDTO.*; - -import java.util.List; - -import org.springframework.stereotype.Service; - import com.assu.server.domain.admin.entity.Admin; import com.assu.server.domain.admin.service.AdminService; -import com.assu.server.domain.member.entity.Member; import com.assu.server.domain.common.enums.ActivationStatus; import com.assu.server.domain.common.enums.UserRole; -import com.assu.server.domain.partnership.converter.PartnershipConverter; +import com.assu.server.domain.member.entity.Member; import com.assu.server.domain.partnership.dto.PaperContentResponseDTO; import com.assu.server.domain.partnership.dto.PaperResponseDTO; import com.assu.server.domain.partnership.entity.Paper; @@ -23,9 +16,14 @@ import com.assu.server.domain.user.entity.Student; import com.assu.server.global.apiPayload.code.status.ErrorStatus; import com.assu.server.global.exception.GeneralException; - import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.util.List; + +import static com.assu.server.domain.partnership.dto.PaperContentResponseDTO.toContentResponseList; @Service @RequiredArgsConstructor @@ -79,4 +77,12 @@ public PaperResponseDTO getStorePaperContent(Long storeId, Member member){ } + /** + * paper 상태를 업데이트하는 메서드 (ACTIVE -> INACTIVE) + */ + @Override + public void updatePaperStatus() { + LocalDate today = LocalDate.now(); + paperRepository.updatePaperStatus(today, ActivationStatus.INACTIVE, ActivationStatus.ACTIVE); + } } diff --git a/src/main/java/com/assu/server/domain/partnership/service/PaperScheduler.java b/src/main/java/com/assu/server/domain/partnership/service/PaperScheduler.java new file mode 100644 index 00000000..da7f2fd0 --- /dev/null +++ b/src/main/java/com/assu/server/domain/partnership/service/PaperScheduler.java @@ -0,0 +1,20 @@ +package com.assu.server.domain.partnership.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class PaperScheduler { + private final PaperQueryServiceImpl paperQueryService; + + /** + * 매일 자정에 만료된 Paper를 INACTIVE로 변경 + * "0 0 0 * * *" → 매일 00:00:00 + */ + @Scheduled(cron = "0 0 0 * * *", zone = "Asia/Seoul") + public void updateExpiredPapers() { + paperQueryService.updatePaperStatus(); + } +}