Skip to content

Commit

Permalink
Type: 알림 시간 설정 (챌린지 결과 알림, 인증글 작성 리마인드 알림) (#89)
Browse files Browse the repository at this point in the history
[Chore] 알림 시간 설정 (챌린지 결과 알림, 인증글 작성 리마인드 알림)
  • Loading branch information
pingowl authored Nov 15, 2023
2 parents 6d69089 + 4d82889 commit beca2d2
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ public interface ChallengeRepository extends JpaRepository<Challenge, Long>, Cha
@Query("select c from Challenge c where c.startDate > :date")
List<Challenge> findAllByStartDateIsAfter(@Param("date") LocalDate date);
List<Challenge> findAllByStatus(String status);
List<Challenge> findAllByEndDateAndStatus(LocalDate date, String status);
}
2 changes: 2 additions & 0 deletions src/main/java/igoMoney/BE/repository/RecordRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@ public interface RecordRepository extends JpaRepository<Record, Long> {
List<Record> 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);
}
72 changes: 53 additions & 19 deletions src/main/java/igoMoney/BE/service/ChallengeService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);
}

}
}
}
Expand Down Expand Up @@ -348,6 +330,58 @@ public void checkAttendance() {
}
}

@Scheduled(cron="0 0 21 * * *", zone = "Asia/Seoul") // 초 분 시 일 월 요일
public void remindRecordAlarm(){
List<Challenge> challenges = challengeRepository.findAllByStatus("inProgress");
for (Challenge c : challenges){
List<User> 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<Challenge> challenges = challengeRepository.findAllByEndDateAndStatus(LocalDate.now(), "done");
for (Challenge c : challenges){
List<User> 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) {

Expand Down

0 comments on commit beca2d2

Please sign in to comment.