From 6cecf71217245228f901bf18e13174fba91c2657 Mon Sep 17 00:00:00 2001 From: ohjinseo Date: Sun, 6 Aug 2023 17:29:59 +0900 Subject: [PATCH 1/6] =?UTF-8?q?fix=20:=20=EB=AF=B8=EC=85=98=20=ED=98=84?= =?UTF-8?q?=EC=9E=AC=20=ED=9A=8C=EC=B0=A8=EC=97=90=EC=84=9C=20=EC=88=9C?= =?UTF-8?q?=EC=84=9C=20=EA=B5=AC=ED=95=98=EB=8A=94=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../snackexercise/repository/joinlist/JoinListRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..f67da70 100644 --- a/src/main/java/com/soma/snackexercise/repository/joinlist/JoinListRepository.java +++ b/src/main/java/com/soma/snackexercise/repository/joinlist/JoinListRepository.java @@ -116,7 +116,7 @@ public interface JoinListRepository extends JpaRepository { "AND j.status = :status ") Integer findMaxExecutedMissionCountByGroupAndStatus(@Param("group") Group group, @Param("status") Status status); - @Query("SELECT COUNT(*) " + + @Query("SELECT COUNT(DISTINCT j) " + "FROM JoinList j " + "WHERE j.group = :group " + "AND j.status = :status " + From 810fd68198f15b2905fd30b78b4e01ea1427a4fb Mon Sep 17 00:00:00 2001 From: ohjinseo Date: Sun, 6 Aug 2023 18:09:41 +0900 Subject: [PATCH 2/6] =?UTF-8?q?fix=20:=20=EA=B7=B8=EB=A3=B9=EC=9B=90?= =?UTF-8?q?=EB=93=A4=EC=9D=98=20=EB=AF=B8=EC=85=98=20=EC=88=98=ED=96=89=20?= =?UTF-8?q?=ED=9A=9F=EC=88=98=EA=B0=80=20=EB=AA=A8=EB=91=90=20=EB=8F=99?= =?UTF-8?q?=EC=9D=BC=EC=8B=9C=20=EB=AF=B8=EC=85=98=20=ED=9A=8C=EC=B0=A8=20?= =?UTF-8?q?=EA=B5=AC=ED=95=98=EB=8A=94=20=EC=BF=BC=EB=A6=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/joinlist/JoinListRepository.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 f67da70..b680ceb 100644 --- a/src/main/java/com/soma/snackexercise/repository/joinlist/JoinListRepository.java +++ b/src/main/java/com/soma/snackexercise/repository/joinlist/JoinListRepository.java @@ -110,7 +110,10 @@ 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 ") From dd21e81c4a69b77dcc4aa31a3dc18f9280211fa2 Mon Sep 17 00:00:00 2001 From: ohjinseo Date: Sun, 6 Aug 2023 18:19:01 +0900 Subject: [PATCH 3/6] =?UTF-8?q?fix=20:=20=EB=AF=B8=EC=85=98=20=EC=88=9C?= =?UTF-8?q?=EC=84=9C=20=EC=BF=BC=EB=A6=AC=EC=97=90=EC=84=9C=20=ED=98=84?= =?UTF-8?q?=EC=9E=AC=20=ED=9A=8C=EC=B0=A8=EB=A5=BC=20=ED=8C=8C=EB=9D=BC?= =?UTF-8?q?=EB=AF=B8=ED=84=B0=EB=A1=9C=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/joinlist/JoinListRepository.java | 9 +++------ .../snackexercise/service/mission/MissionService.java | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) 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 b680ceb..80ee6fe 100644 --- a/src/main/java/com/soma/snackexercise/repository/joinlist/JoinListRepository.java +++ b/src/main/java/com/soma/snackexercise/repository/joinlist/JoinListRepository.java @@ -119,15 +119,12 @@ public interface JoinListRepository extends JpaRepository { "AND j.status = :status ") Integer findMaxExecutedMissionCountByGroupAndStatus(@Param("group") Group group, @Param("status") Status status); - @Query("SELECT COUNT(DISTINCT j) " + + @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/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); } From 23a604870ef6d7449f7b426e08366437141cc78a Mon Sep 17 00:00:00 2001 From: ohjinseo Date: Mon, 7 Aug 2023 01:04:37 +0900 Subject: [PATCH 4/6] =?UTF-8?q?fix=20:=20=ED=8C=8C=EB=9D=BC=EB=AF=B8?= =?UTF-8?q?=ED=84=B0=EB=A1=9C=20=EB=93=A4=EC=96=B4=EC=98=A8=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=EC=9D=B4=20endAt=20=ED=95=84=EB=93=9C=EB=B3=B4?= =?UTF-8?q?=EB=8B=A4=20=EB=92=A4=EC=97=90=20=EC=9E=88=EC=9D=84=20=EB=95=8C?= =?UTF-8?q?=20=EA=B7=B8=EB=A3=B9=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=EB=A5=BC=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/group/GroupRepository.java | 2 +- .../mission/MissionSchedulerService.java | 5 +++-- .../factory/entity/GroupFactory.java | 19 +++++++++++++++++++ .../joinlist/JoinListRepositoryTest.java | 2 +- .../MissionSchedulerServiceUnitTest.java | 2 +- 5 files changed, 25 insertions(+), 5 deletions(-) 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/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/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 From ac5d1c4af7cae3148cb7fe1b9bbeb84e6fa49014 Mon Sep 17 00:00:00 2001 From: ohjinseo Date: Mon, 7 Aug 2023 02:38:18 +0900 Subject: [PATCH 5/6] =?UTF-8?q?fix=20:=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=ED=8C=8C=EC=9D=BC=20=EC=8B=A4=ED=96=89=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C=20=EB=B6=80=EC=97=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/run.sh | 0 scripts/stop.sh | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) mode change 100644 => 100755 scripts/run.sh mode change 100644 => 100755 scripts/stop.sh 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 From 57e7229f31d536caa2109c85751bb73d42b6ba70 Mon Sep 17 00:00:00 2001 From: ohjinseo Date: Mon, 7 Aug 2023 02:45:16 +0900 Subject: [PATCH 6/6] =?UTF-8?q?ci/cd=20:=20prod=20=EB=B0=B0=ED=8F=AC=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/prod-deploy.yml | 18 +++++++++++++----- appspec.yml | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/prod-deploy.yml b/.github/workflows/prod-deploy.yml index 2dc2e71..29e3d2a 100644 --- a/.github/workflows/prod-deploy.yml +++ b/.github/workflows/prod-deploy.yml @@ -103,10 +103,19 @@ jobs: - name: Create app-deploy folder에 move appspec.yml and scripts folder and zip app-deploy folder run: | mkdir app-deploy - cp scripts/*.sh appdeploy/ - cp appspec.yml appdeploy/ + cp appspec.yml app-deploy/ + cd app-deploy + mkdir scripts + cd .. + cp scripts/*.sh app-deploy/scripts/ zip -r app-deploy.zip app-deploy - + + - name: Check files and folders + run: | + ls -al + ls -al scripts/ + cat appspec.yml + # (8) appspec.yml, scripts 파일을 S3 버킷에 업로드 - name: Upload to AWS S3 @@ -124,5 +133,4 @@ jobs: --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \ --deployment-config-name CodeDeployDefault.AllAtOnce \ --deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \ - --s3-location bucket=$S3_BUCKET_NAME,key=$GITHUB_SHA.zip,bundleType=zip - + --s3-location bucket=$S3_BUCKET_NAME,key=deploy/$GITHUB_SHA.zip,bundleType=zip \ No newline at end of file diff --git a/appspec.yml b/appspec.yml index 8822aaa..d1e63a6 100644 --- a/appspec.yml +++ b/appspec.yml @@ -2,7 +2,7 @@ version: 0.0 os: ubuntu files: - - source: / + - source: ./ destination: /home/ubuntu/app overwrite: yes