Skip to content

Commit

Permalink
Merge pull request #41 from dnd-side-project/feature/#40
Browse files Browse the repository at this point in the history
스케줄러 #40
  • Loading branch information
woo0doo authored Feb 20, 2024
2 parents fffdb4f + 4c09d55 commit d1f0eb3
Show file tree
Hide file tree
Showing 12 changed files with 199 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/main/java/com/sendback/SendbackApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableCaching
@EnableScheduling
@SpringBootApplication
public class SendbackApplication {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,8 @@ public static Feedback of(User user, Project project, SaveFeedbackRequestDto sav
.build();
}

public void updateIsFinished() {
this.isFinished = true;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
import com.sendback.domain.project.entity.Project;
import org.springframework.data.jpa.repository.JpaRepository;

import java.time.LocalDate;
import java.util.List;

public interface FeedbackRepository extends JpaRepository<Feedback, Long> {

List<Feedback> findTop3ByProjectAndIsDeletedIsFalseOrderByIdDesc(Project project);
List<Feedback> findAllByEndedAtBeforeAndIsDeletedIsFalse(LocalDate localDate);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.sendback.domain.feedback.service;

import com.sendback.domain.feedback.entity.Feedback;
import com.sendback.domain.feedback.repository.FeedbackRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.List;

@Service
@Transactional
@RequiredArgsConstructor
public class FeedbackSchedulerService {

private final FeedbackRepository feedbackRepository;

@Scheduled(cron = "15 0 0 * * *")
public void updateProjectByEndDate() {

LocalDate now = LocalDate.now();
List<Feedback> feedbacks = feedbackRepository.findAllByEndedAtBeforeAndIsDeletedIsFalse(now);

feedbacks.forEach(
Feedback::updateIsFinished);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
import org.springframework.data.jpa.repository.JpaRepository;


import java.time.LocalDate;
import java.util.List;

public interface ProjectRepository extends JpaRepository<Project, Long>, ProjectRepositoryCustom {
Long countByUserId(Long userId);
List<Project> findByUserId(Long userId);
List<Project> findAllByEndedAtBeforeAndIsDeletedIsFalse(LocalDate localDate);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.sendback.domain.project.service;

import com.sendback.domain.project.entity.Project;
import com.sendback.domain.project.repository.ProjectRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.List;

@Service
@Transactional
@RequiredArgsConstructor
public class ProjectSchedulerService {

private final ProjectRepository projectRepository;

@Scheduled(cron = "0 0 0 * * *")
public void updateProjectByEndDate() {

LocalDate now = LocalDate.now();
List<Project> projects = projectRepository.findAllByEndedAtBeforeAndIsDeletedIsFalse(now);

projects.forEach(
Project::updateIsFinished);
}
}
4 changes: 4 additions & 0 deletions src/main/java/com/sendback/domain/user/entity/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,8 @@ public boolean isOverPullUpCnt() {
public void actPullUp() {
this.pullUpCnt += 1;
}

public void resetPullUpCnt() {
this.pullUpCnt = 0L;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findBySocialId(String socialId);
Optional<User> findByNickname(String nickname);
List<User> findAllByPullUpCntIsGreaterThan(Long cnt);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.sendback.domain.user.service;

import com.sendback.domain.user.entity.User;
import com.sendback.domain.user.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
@RequiredArgsConstructor
public class UserSchedulerService {

private final UserRepository userRepository;

@Scheduled(cron = "30 0 0 * * 0")
public void updatePullUpCnt() {

List<User> users = userRepository.findAllByPullUpCntIsGreaterThan(0L);

users.forEach(
User::resetPullUpCnt
);

}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.sendback.domain.feedback.repository;

import com.sendback.domain.feedback.dto.request.SaveFeedbackRequestDto;
import com.sendback.domain.feedback.entity.Feedback;
import com.sendback.domain.feedback.persister.FeedbackTestPersister;
import com.sendback.global.RepositoryTest;
Expand All @@ -8,6 +9,7 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.time.LocalDate;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
Expand Down Expand Up @@ -71,4 +73,35 @@ public void success_threeFeedback() throws Exception {
assertThat(response.get(2)).usingRecursiveComparison().isEqualTo(feedback_third);
}
}

@Nested
@DisplayName("피드백 종료일이 지났는지 조회")
class findAllByEndedAtBeforeAndIsDeletedIsFalse {

@Test
@DisplayName("리스트를 반환한다.")
public void success() throws Exception {
//given
FeedbackTestPersister.FeedbackBuilder feedbackBuilder = feedbackTestPersister.builder();
Feedback feedback_A = feedbackBuilder.save();
Feedback feedback_B = feedbackBuilder.save();
Feedback feedback_C = feedbackBuilder.save();
SaveFeedbackRequestDto saveFeedbackRequestDto = new SaveFeedbackRequestDto(
"title", "link", "content", "reward",
LocalDate.of(2024, 1, 12), LocalDate.of(2025, 1, 12)
);

feedbackBuilder.saveFeedbackRequestDto(saveFeedbackRequestDto).save();
feedbackBuilder.saveFeedbackRequestDto(saveFeedbackRequestDto).save();
LocalDate now = LocalDate.now();

//when
List<Feedback> feedbacks = feedbackRepository.findAllByEndedAtBeforeAndIsDeletedIsFalse(now);

//then
assertThat(feedbacks.size()).isEqualTo(3);
assertThat(feedbacks).containsExactlyInAnyOrder(feedback_A, feedback_B, feedback_C);

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.sendback.domain.feedback.persister.FeedbackTestPersister;
import com.sendback.domain.like.persister.LikeTestPersister;
import com.sendback.domain.project.dto.request.SaveProjectRequestDto;
import com.sendback.domain.project.entity.Project;
import com.sendback.domain.project.persister.ProjectTestPersister;
import com.sendback.global.RepositoryTest;
Expand All @@ -15,6 +16,7 @@
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

import java.time.LocalDate;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
Expand Down Expand Up @@ -274,4 +276,34 @@ public void success_allField_orderByLikeCnt_keyword_finished() throws Exception
}
}

@Nested
@DisplayName("프로젝트가 종료일이 지났는지 조회")
class findAllByEndedAtBeforeAndIsDeletedIsFalse {

@Test
@DisplayName("리스트를 반환한다.")
public void success() throws Exception {
//given
ProjectTestPersister.ProjectBuilder projectBuilder = projectTestPersister.builder();
Project project_A = projectBuilder.save();
Project project_B = projectBuilder.save();
Project project_C = projectBuilder.save();
SaveProjectRequestDto saveProjectRequestDto = new SaveProjectRequestDto(
"title", "게임", "content", "summary", "demo",
LocalDate.of(2024, 1, 12), LocalDate.of(2025, 1, 12),
"기획중", 0L, 1L, 2L, 3L);
projectBuilder.saveProjectRequestDto(saveProjectRequestDto).save();
projectBuilder.saveProjectRequestDto(saveProjectRequestDto).save();
LocalDate now = LocalDate.now();

//when
List<Project> projects = projectRepository.findAllByEndedAtBeforeAndIsDeletedIsFalse(now);

//then
assertThat(projects.size()).isEqualTo(3);
assertThat(projects).containsExactlyInAnyOrder(project_A, project_B, project_C);

}
}

}
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package com.sendback.domain.user.repository;

import com.sendback.domain.user.entity.User;
import com.sendback.domain.user.persister.UserTestPersister;
import com.sendback.global.RepositoryTest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

Expand Down Expand Up @@ -46,4 +49,30 @@ public void findByNickname_null() {
}
}

@Nested
@DisplayName("pullUpCnt가 1 이상인 유저 조회")
class findAllByPullUpCntIsGreaterThan {

@Test
@DisplayName("검색에 성공한다.")
public void success_existUsers() throws Exception {
//given
UserTestPersister.UserBuilder builder = userTestPersister.builder();
User user_A = builder.save();
User user_B = builder.save();
user_B.actPullUp();
User user_C = builder.save();
user_C.actPullUp();
User user_D = builder.save();

//when
List<User> users = userRepository.findAllByPullUpCntIsGreaterThan(0L);

//then
assertThat(users.size()).isEqualTo(2);
assertThat(users).containsExactlyInAnyOrder(user_B, user_C);

}
}

}

0 comments on commit d1f0eb3

Please sign in to comment.