diff --git a/scripts/run.sh b/scripts/run.sh old mode 100644 new mode 100755 diff --git a/scripts/stop.sh b/scripts/stop.sh old mode 100644 new mode 100755 index 9dd6602..eea4f04 --- a/scripts/stop.sh +++ b/scripts/stop.sh @@ -1,2 +1,3 @@ #!/bin/bash -sudo docker-compose down \ No newline at end of file +sudo docker-compose down +sudo service codedeploy-agent start \ No newline at end of file diff --git a/src/main/java/com/soma/snackexercise/repository/group/GroupRepository.java b/src/main/java/com/soma/snackexercise/repository/group/GroupRepository.java index 998c1ef..cd62283 100644 --- a/src/main/java/com/soma/snackexercise/repository/group/GroupRepository.java +++ b/src/main/java/com/soma/snackexercise/repository/group/GroupRepository.java @@ -29,5 +29,5 @@ public interface GroupRepository extends JpaRepository { * @param status * @return */ - List findAllByEndDateGreaterThanAndStatus(LocalDate now, Status status); + List findAllByEndDateLessThanAndStatus(LocalDate now, Status status); } diff --git a/src/main/java/com/soma/snackexercise/repository/joinlist/JoinListRepository.java b/src/main/java/com/soma/snackexercise/repository/joinlist/JoinListRepository.java index 9707959..80ee6fe 100644 --- a/src/main/java/com/soma/snackexercise/repository/joinlist/JoinListRepository.java +++ b/src/main/java/com/soma/snackexercise/repository/joinlist/JoinListRepository.java @@ -110,21 +110,21 @@ public interface JoinListRepository extends JpaRepository { @Query("SELECT j from JoinList j JOIN FETCH j.group g WHERE j.member = :member AND j.status = 'ACTIVE'") List findAllActiveJoinGroupsByMember(@Param("member") Member member); - @Query("SELECT MAX(j.executedMissionCount) " + + + @Query("SELECT CASE WHEN COUNT(DISTINCT j.executedMissionCount) = 1 " + + "THEN MAX(j.executedMissionCount) + 1 " + + "ELSE MAX(j.executedMissionCount) END " + "FROM JoinList j " + "WHERE j.group = :group " + "AND j.status = :status ") Integer findMaxExecutedMissionCountByGroupAndStatus(@Param("group") Group group, @Param("status") Status status); - @Query("SELECT COUNT(*) " + + @Query("SELECT COUNT(j) " + "FROM JoinList j " + "WHERE j.group = :group " + "AND j.status = :status " + - "AND j.executedMissionCount = (SELECT MAX(j.executedMissionCount) " + - "FROM JoinList j " + - "WHERE j.group = :group " + - "AND j.status = :status )") - Integer findCurrentRoundPositionByGroupId(@Param("group") Group group, @Param("status") Status status); + "AND j.executedMissionCount = :currentFinishedRelayCount ") + Integer findCurrentRoundPositionByGroupId(@Param("group") Group group, @Param("status") Status status, @Param("currentFinishedRelayCount") Integer currentFinishedRelayCount); /** * 그룹에서 목표 릴레이 횟수를 달성한 회원의 수를 반환합니다. diff --git a/src/main/java/com/soma/snackexercise/service/mission/MissionSchedulerService.java b/src/main/java/com/soma/snackexercise/service/mission/MissionSchedulerService.java index 64786c3..2b1fdb0 100644 --- a/src/main/java/com/soma/snackexercise/service/mission/MissionSchedulerService.java +++ b/src/main/java/com/soma/snackexercise/service/mission/MissionSchedulerService.java @@ -50,7 +50,7 @@ public class MissionSchedulerService { */ // todo : Transactionl을 붙여주는게 나을까..? //@Scheduled(fixedRate = 5000) // 이전 Task 시작 시점으로부터 5초가 지난 후 Task 실행 - @Async + //@Async @Scheduled(cron = "1 * * * * *") // 1분마다 실행, cron 표현식 @Transactional public void allocateMissionAtGroupStartTime() { @@ -61,6 +61,7 @@ public void allocateMissionAtGroupStartTime() { List exerciseList = exerciseRepository.findAll(); // 모든 그룹에 대해서 현재 시각이 그룹의 시작시간과 시간차이가 5초 이하인 그룹에 대해서 미션 할당 및 알림 보내기 + System.out.println("not test : " + groupList.size()); LocalTime now = LocalTime.now(); for (Group group : groupList) { long timeDiff = ChronoUnit.MINUTES.between(now, group.getStartTime()); // group.getStartTime - now @@ -168,7 +169,7 @@ public void inActiveGroupsPastEndDate() { log.info("============= 그룹 종료 일자 스케줄러 ============="); // 종료 여부에 관계없이 group이 Active한 그룹들 중에서 EndDate가 지난 그룹 LocalDate now = LocalDate.now(); - List groupList = groupRepository.findAllByEndDateGreaterThanAndStatus(now, Status.ACTIVE); + List groupList = groupRepository.findAllByEndDateLessThanAndStatus(now, Status.ACTIVE); for (Group group : groupList) { // 그룹 inActive diff --git a/src/main/java/com/soma/snackexercise/service/mission/MissionService.java b/src/main/java/com/soma/snackexercise/service/mission/MissionService.java index 6aa86bb..13264b4 100644 --- a/src/main/java/com/soma/snackexercise/service/mission/MissionService.java +++ b/src/main/java/com/soma/snackexercise/service/mission/MissionService.java @@ -144,7 +144,7 @@ public MissionResponse read(Long groupId, String email) { Integer currentFinishedRelayCount = joinListRepository.findMaxExecutedMissionCountByGroupAndStatus(group, Status.ACTIVE); // 현재 회차에서 몇 번째 - Integer currentRoundPosition = joinListRepository.findCurrentRoundPositionByGroupId(group, Status.ACTIVE) + 1; + Integer currentRoundPosition = joinListRepository.findCurrentRoundPositionByGroupId(group, Status.ACTIVE, currentFinishedRelayCount) + 1; return MissionResponse.toDto(mission, currentFinishedRelayCount, currentRoundPosition); } diff --git a/src/test/java/com/soma/snackexercise/factory/entity/GroupFactory.java b/src/test/java/com/soma/snackexercise/factory/entity/GroupFactory.java index e445aec..6e5ffd6 100644 --- a/src/test/java/com/soma/snackexercise/factory/entity/GroupFactory.java +++ b/src/test/java/com/soma/snackexercise/factory/entity/GroupFactory.java @@ -25,6 +25,25 @@ public static Group createGroup() { .build(); } + public static Group createGroupWithStartTime(LocalTime startTime) { + LocalTime now = LocalTime.now().truncatedTo(ChronoUnit.SECONDS); + return Group.builder() + .name("name") + .emozi("emozi") + .color("red") + .description("desc") + .maxMemberNum(3) + .goalRelayNum(10) + .startTime(startTime) + .endTime(startTime.plusHours(1)) + .existDays(5) + .penalty("커피 사기") + .code("code") + .checkIntervalTime(10) + .checkMaxNum(2) + .build(); + } + public static Group createGroupWithName(String name) { return Group.builder() .name(name) diff --git a/src/test/java/com/soma/snackexercise/repository/joinlist/JoinListRepositoryTest.java b/src/test/java/com/soma/snackexercise/repository/joinlist/JoinListRepositoryTest.java index 285fd7a..722b2fa 100644 --- a/src/test/java/com/soma/snackexercise/repository/joinlist/JoinListRepositoryTest.java +++ b/src/test/java/com/soma/snackexercise/repository/joinlist/JoinListRepositoryTest.java @@ -181,7 +181,7 @@ void findMaxExecutedMissionCountByGroupAndStatusTest() { clear(); - int cnt = joinListRepository.findCurrentRoundPositionByGroupId(group, Status.ACTIVE); + int cnt = joinListRepository.findCurrentRoundPositionByGroupId(group, Status.ACTIVE, 1); assertThat(cnt).isEqualTo(2); } diff --git a/src/test/java/com/soma/snackexercise/service/mission/MissionSchedulerServiceUnitTest.java b/src/test/java/com/soma/snackexercise/service/mission/MissionSchedulerServiceUnitTest.java index fd30887..20859f2 100644 --- a/src/test/java/com/soma/snackexercise/service/mission/MissionSchedulerServiceUnitTest.java +++ b/src/test/java/com/soma/snackexercise/service/mission/MissionSchedulerServiceUnitTest.java @@ -132,7 +132,7 @@ void inActiveGroupPastEndDateTest() { JoinList joinList = createJoinListForMember(member, group); List joinLists = List.of(joinList); - given(groupRepository.findAllByEndDateGreaterThanAndStatus(any(), any())).willReturn(groupList); + given(groupRepository.findAllByEndDateLessThanAndStatus(any(), any())).willReturn(groupList); given(joinListRepository.findByGroupAndStatus(any(Group.class), any())).willReturn(joinLists); // when