Skip to content

Commit

Permalink
#271 fix: 팀 상태 업데이트 스케줄러 적용
Browse files Browse the repository at this point in the history
  • Loading branch information
yumzen committed Oct 3, 2024
1 parent 0eddb5c commit 4303700
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

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

public interface TeamRepositoryCustom {
Expand All @@ -26,4 +28,8 @@ public interface TeamRepositoryCustom {
Page<SimpleTeamRes> findScrapPagination(Long memberId, Pageable pageable);

Boolean equalsLeaderIdAndMember(Portfolio portfolio, Member member);

List<Team> findAllByRecruitFinishedAtAndStartedAtBeforeAndFinishedAtAfter(LocalDate today);

List<Team> findAllByTeamStatusAndFinishedAtBefore(LocalDate today);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -291,4 +292,27 @@ public Boolean equalsLeaderIdAndMember(Portfolio portfolio, Member member) {
.where(booleanBuilder)
.fetchFirst() != null;
}

public List<Team> findAllByRecruitFinishedAtAndStartedAtBeforeAndFinishedAtAfter(LocalDate today) {
return queryFactory
.selectFrom(team)
.where(
team.deletedAt.isNull(),
team.recruitFinishedAt.before(LocalDate.from(today)),
team.startedAt.before(LocalDate.from(today)),
team.finishedAt.after(LocalDate.from(today))
)
.fetch();
}

public List<Team> findAllByTeamStatusAndFinishedAtBefore(LocalDate today) {
return queryFactory
.selectFrom(team)
.where(
team.deletedAt.isNull(),
team.status.eq(TeamStatus.valueOf(TeamStatus.ACTIVE.name())),
team.finishedAt.before(LocalDate.from(today))
)
.fetch();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -349,4 +349,22 @@ public void updatePassCount(Team team) {
int passCount = applyRepository.countByTeamIdAndStatusAndDeletedAtIsNull(team.getId(), ApplyStatus.ACCEPTED);
team.updatePassCount(passCount);
}

@Transactional
public void updateTeamsToActiveStatus() {
List<Team> activeTeams = teamRepository.findAllByRecruitFinishedAtAndStartedAtBeforeAndFinishedAtAfter(LocalDate.now());

if (!activeTeams.isEmpty()) {
activeTeams.forEach(team -> team.updateTeamStatus(TeamStatus.ACTIVE));
teamRepository.saveAll(activeTeams);
}

List<Team> finishedTeams = teamRepository.findAllByTeamStatusAndFinishedAtBefore(LocalDate.now());

if (!finishedTeams.isEmpty()) {
finishedTeams.forEach(team -> team.updateTeamStatus(TeamStatus.FINISHED));
teamRepository.saveAll(finishedTeams);
}
}

}
30 changes: 30 additions & 0 deletions src/main/java/com/gongjakso/server/global/config/QuartzConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.gongjakso.server.global.config;

import com.gongjakso.server.global.util.quartz.UpdateTeamStatusJob;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.quartz.*;
import org.springframework.context.annotation.Configuration;

@Configuration
@RequiredArgsConstructor
public class QuartzConfig {

private final Scheduler scheduler;

@PostConstruct
public void scheduleDailyJob() throws SchedulerException {
JobDetail jobDetail = JobBuilder
.newJob(UpdateTeamStatusJob.class)
.withIdentity("updateTeamStatusJob", "teamStatusGroup")
.build();

Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("updateTeamStatusTrigger", "teamStatusGroup")
.withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(0, 0))
.build();

scheduler.scheduleJob(jobDetail, trigger);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.gongjakso.server.global.util.quartz;

import com.gongjakso.server.domain.team.service.TeamService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class UpdateTeamStatusJob implements Job {

@Autowired
private TeamService teamService;

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
teamService.updateTeamsToActiveStatus();
}
}

0 comments on commit 4303700

Please sign in to comment.