diff --git a/src/main/java/com/climeet/climeet_backend/ClimeetBackendApplication.java b/src/main/java/com/climeet/climeet_backend/ClimeetBackendApplication.java index 16286b72..19383219 100644 --- a/src/main/java/com/climeet/climeet_backend/ClimeetBackendApplication.java +++ b/src/main/java/com/climeet/climeet_backend/ClimeetBackendApplication.java @@ -3,9 +3,11 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableJpaAuditing +@EnableScheduling public class ClimeetBackendApplication { public static void main(String[] args) { diff --git a/src/main/java/com/climeet/climeet_backend/domain/followrelationship/FollowRelationship.java b/src/main/java/com/climeet/climeet_backend/domain/followrelationship/FollowRelationship.java index a6bf5c01..0a8152a6 100644 --- a/src/main/java/com/climeet/climeet_backend/domain/followrelationship/FollowRelationship.java +++ b/src/main/java/com/climeet/climeet_backend/domain/followrelationship/FollowRelationship.java @@ -9,6 +9,7 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; +import jakarta.transaction.Transactional; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -40,7 +41,13 @@ public static FollowRelationship toEntity(User follower, User following){ return FollowRelationship.builder() .follower(follower) .following(following) + .isUploadShortsRecent(false) .build(); } + @Transactional + public void updateUploadStatus(boolean status){ + this.isUploadShortsRecent = status; + } + } \ No newline at end of file diff --git a/src/main/java/com/climeet/climeet_backend/domain/shorts/ShortsRepository.java b/src/main/java/com/climeet/climeet_backend/domain/shorts/ShortsRepository.java index 83d0f8f7..f7e26b93 100644 --- a/src/main/java/com/climeet/climeet_backend/domain/shorts/ShortsRepository.java +++ b/src/main/java/com/climeet/climeet_backend/domain/shorts/ShortsRepository.java @@ -1,5 +1,6 @@ package com.climeet.climeet_backend.domain.shorts; +import java.time.LocalDateTime; import java.util.List; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; @@ -49,4 +50,6 @@ public interface ShortsRepository extends JpaRepository { Slice findAllByShortsVisibilityInAndRouteIdOrderByCreatedAtDesc(List shortsVisibilities, Long routeId, Pageable pageable); + List findByCreatedAtBefore(LocalDateTime dateTime); + } \ No newline at end of file diff --git a/src/main/java/com/climeet/climeet_backend/domain/shorts/ShortsService.java b/src/main/java/com/climeet/climeet_backend/domain/shorts/ShortsService.java index 0141f008..3c2c684c 100644 --- a/src/main/java/com/climeet/climeet_backend/domain/shorts/ShortsService.java +++ b/src/main/java/com/climeet/climeet_backend/domain/shorts/ShortsService.java @@ -1,5 +1,7 @@ package com.climeet.climeet_backend.domain.shorts; +import static java.util.stream.Collectors.toList; + import com.climeet.climeet_backend.domain.climbinggym.ClimbingGym; import com.climeet.climeet_backend.domain.climbinggym.ClimbingGymRepository; import com.climeet.climeet_backend.domain.difficultymapping.DifficultyMapping; @@ -24,16 +26,22 @@ import com.climeet.climeet_backend.global.response.exception.GeneralException; import com.climeet.climeet_backend.global.s3.S3Service; import jakarta.transaction.Transactional; +import java.time.LocalDateTime; +import java.util.Date; import java.util.List; +import lombok.Data; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @RequiredArgsConstructor @Service +@Slf4j public class ShortsService { private final ShortsRepository shortsRepository; @@ -74,6 +82,13 @@ public void uploadShorts(User user, MultipartFile video, createShortsRequest); shortsRepository.save(shorts); + + //팔로워 관계 isUploadShortsRecent update + List followRelationshipList = followRelationshipRepository.findByFollowingId(shorts.getUser() + .getId()); + for(FollowRelationship f : followRelationshipList){ + f.updateUploadStatus(true); + } } public PageResponseDto> findShortsLatest(User user, Long gymId, @@ -235,4 +250,24 @@ public List getShortsProfileList(User user) { return shortsProfileSimpleInfos; } + + + @Transactional + @Scheduled(fixedRate = 1000 * 60 * 60 * 24) //하루마다 시행 + public void updateVideoStatus(){ + + LocalDateTime threeDaysAgo = LocalDateTime.now().minusDays(3); + List shortsList = shortsRepository.findByCreatedAtBefore(threeDaysAgo); + for(Shorts shorts : shortsList) { + List followRelationship = followRelationshipRepository.findByFollowingId( + shorts.getUser().getId()); + + for(FollowRelationship relationship : followRelationship){ + relationship.updateUploadStatus(false); + } + + } + + + } } \ No newline at end of file