From 4d82889f3fa949dd3642db9352cc5091ccf489fb Mon Sep 17 00:00:00 2001 From: BK Date: Thu, 16 Nov 2023 00:25:27 +0900 Subject: [PATCH] =?UTF-8?q?Chore:=20=EC=95=8C=EB=A6=BC=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=EC=84=A4=EC=A0=95=20(=EC=B1=8C=EB=A6=B0=EC=A7=80?= =?UTF-8?q?=20=EA=B2=B0=EA=B3=BC=20=EC=95=8C=EB=A6=BC,=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=EA=B8=80=20=EC=9E=91=EC=84=B1=20=EB=A6=AC=EB=A7=88?= =?UTF-8?q?=EC=9D=B8=EB=93=9C=20=EC=95=8C=EB=A6=BC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BE/repository/ChallengeRepository.java | 1 + .../BE/repository/RecordRepository.java | 2 + .../igoMoney/BE/service/ChallengeService.java | 72 ++++++++++++++----- 3 files changed, 56 insertions(+), 19 deletions(-) diff --git a/src/main/java/igoMoney/BE/repository/ChallengeRepository.java b/src/main/java/igoMoney/BE/repository/ChallengeRepository.java index 6bd7424..c3e680e 100644 --- a/src/main/java/igoMoney/BE/repository/ChallengeRepository.java +++ b/src/main/java/igoMoney/BE/repository/ChallengeRepository.java @@ -13,4 +13,5 @@ public interface ChallengeRepository extends JpaRepository, Cha @Query("select c from Challenge c where c.startDate > :date") List findAllByStartDateIsAfter(@Param("date") LocalDate date); List findAllByStatus(String status); + List findAllByEndDateAndStatus(LocalDate date, String status); } diff --git a/src/main/java/igoMoney/BE/repository/RecordRepository.java b/src/main/java/igoMoney/BE/repository/RecordRepository.java index 16b8291..0013033 100644 --- a/src/main/java/igoMoney/BE/repository/RecordRepository.java +++ b/src/main/java/igoMoney/BE/repository/RecordRepository.java @@ -17,4 +17,6 @@ public interface RecordRepository extends JpaRepository { List findAllByUserId(Long userId); @Query(value="SELECT COUNT(*) FROM record r WHERE r.user_id= :userId AND r.date >= DATE_SUB(:date,INTERVAL 3 DAY)", nativeQuery = true) Integer countByUserIdAndDate(@Param("userId") Long userId, @Param("date") LocalDate date); + + Boolean existsByUserIdAndDate(Long userId, LocalDate date); } diff --git a/src/main/java/igoMoney/BE/service/ChallengeService.java b/src/main/java/igoMoney/BE/service/ChallengeService.java index 2717ddc..de3ea8a 100644 --- a/src/main/java/igoMoney/BE/service/ChallengeService.java +++ b/src/main/java/igoMoney/BE/service/ChallengeService.java @@ -151,7 +151,7 @@ public void applyChallenge(Long userId, Long challengeId) { Notification notification = Notification.builder() .user(user2) .title("챌린지 현황") - .message(findChallenge.getStartDate().format(dateFormat)+"부터 "+findUser.getNickname()+"님과 챌린지 시작") + .message(user2.getNickname()+"님! "+findUser.getNickname()+"님과 챌린지가 "+findChallenge.getStartDate().format(dateFormat)+"부터 시작되어요. 챌린지 시작 전에 지출 계획을 세워보세요!") .build(); notificationService.makeNotification(notification); @@ -289,24 +289,6 @@ else if (((BigDecimal) obj[1]).intValue() < minCost){ // 유저 : 챌린지 종료로 설정 u.updateUserStatus(false, null); u.resetReportedCount(); - - if (u.getId().equals(winnerId)) { - // 챌린지 승리자 - Notification notification = Notification.builder() - .user(u) - .title("챌린지 결과") - .message(u.getNickname()+"님! "+lose.getNickname()+"님과의 챌린지 대결에서 승리하셔서 뱃지를 획득하게 되었어요. \uD83E\uDD47") // 🥇 - .build(); - notificationService.makeNotification(notification); - } else{ - Notification notification = Notification.builder() - .user(u) - .title("챌린지 결과") - .message(u.getNickname()+"님! "+findWinner.getNickname()+"님과의 챌린지 대결에서 아쉽게 승리하지 못했어요. 새로운 챌린지를 도전해보세요. \uD83D\uDE25") //😥 - .build(); - notificationService.makeNotification(notification); - } - } } } @@ -348,6 +330,58 @@ public void checkAttendance() { } } + @Scheduled(cron="0 0 21 * * *", zone = "Asia/Seoul") // 초 분 시 일 월 요일 + public void remindRecordAlarm(){ + List challenges = challengeRepository.findAllByStatus("inProgress"); + for (Challenge c : challenges){ + List users = getAllChallengeUser(c.getId()); + for (User u : users){ + if(!recordRepository.existsByUserIdAndDate(u.getId(), LocalDate.now())){ + Notification remindRecordNotification = Notification.builder() + .user(u) + .title("챌린지 현황") + .message(u.getNickname()+"님! 오늘 지출 내역을 인증하지 않으셨어요. 오늘의 지출 내역을 인증해주세요.") + .build(); + notificationService.makeNotification(remindRecordNotification); + } + } + } + } + + @Scheduled(cron="0 0 9 * * *", zone = "Asia/Seoul") // 초 분 시 일 월 요일 + public void challengeResultAlarm(){ + List challenges = challengeRepository.findAllByEndDateAndStatus(LocalDate.now(), "done"); + for (Challenge c : challenges){ + List users = getAllChallengeUser(c.getId()); + for(User u: users){ + User otherUser = getChallengeOtherUser(c.getId(), u.getId()); + if(c.getWinnerId() == -1L){ + Notification notification = Notification.builder() + .user(u) + .title("챌린지 결과") + .message(u.getNickname()+"님! "+otherUser.getNickname()+"님과의 챌린지 대결에서 무승부가 되어 두 분 다 뱃지를 획득하게 되었어요. 새로운 챌린지를 도전해보세요.") + .build(); + notificationService.makeNotification(notification); + } else if(u.getId() == c.getWinnerId()){ + Notification notification = Notification.builder() + .user(u) + .title("챌린지 결과") + .message(u.getNickname()+"님! "+otherUser.getNickname()+"님과의 챌린지 대결에서 승리하셔서 뱃지를 획득하게 되었어요. \uD83E\uDD47") // 🥇 + .build(); + notificationService.makeNotification(notification); + } else { + Notification notification = Notification.builder() + .user(u) + .title("챌린지 결과") + .message(u.getNickname()+"님! "+otherUser.getNickname()+"님과의 챌린지 대결에서 아쉽게 승리하지 못했어요. 새로운 챌린지를 도전해보세요. \uD83D\uDE25") //😥 + .build(); + notificationService.makeNotification(notification); + } + } + + } + } + // 예외 처리 - 존재하는 challenge 인가 private Challenge getChallengeOrThrow(Long id) {