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(); + } +}