Skip to content

Commit

Permalink
feat: 매일 오전 10시 이동봉사 진행 완료 요청 알림 스케줄링 구현 (#204)
Browse files Browse the repository at this point in the history
  • Loading branch information
kyeong-hyeok committed May 19, 2024
1 parent 03ea0e9 commit e6404a8
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ public interface CustomApplicationRepository {
boolean existsByPostIdAndPostStatus(Long postId);
void updateExpiredApplications(LocalDate today);
List<Application> getYesterdayExpiredApplications(LocalDate date);
List<Application> getExpiredProgressingPosts(LocalDate date);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.pawwithu.connectdog.domain.application.entity.Application;
import com.pawwithu.connectdog.domain.application.entity.ApplicationStatus;
import com.pawwithu.connectdog.domain.application.repository.CustomApplicationRepository;
import com.pawwithu.connectdog.domain.post.entity.Post;
import com.querydsl.core.Tuple;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
Expand Down Expand Up @@ -216,4 +217,14 @@ public void updateExpiredApplications(LocalDate date) {
em.clear();
}

// 어제 일정이 종료된 진행중인 봉사 신청 가져오기
@Override
public List<Application> getExpiredProgressingPosts(LocalDate date) {
return queryFactory.selectFrom(application)
.join(application.post, post)
.where(application.status.eq(ApplicationStatus.PROGRESSING)
.and(post.endDate.eq(date)))
.fetch();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@ public enum NotificationMessage {
CONFIRM("이동봉사 승인", "이동봉사가 승인되었어요🎉\n모집자의 연락을 기다려 주세요!"),
REJECT("이동봉사 반려", "이동봉사가 반려되었어요😥\n다른 이동봉사를 찾아볼까요?"),
COMPLETED("이동봉사 완료", "이동봉사 진행이 완료되었어요🐾\n소중한 후기를 들려주세요!"),
EXPIRED_REJECT("이동봉사 반려", "모집 기간이 마감되어 이동봉사가 반려되었어요😥"),

// 모집자
APPLICATION("이동봉사 신청", "님이 이동봉사를 신청하셨어요.\n지금 확인해 보세요!"),
CANCELED("이동봉사 신청 취소", "님이 이동봉사를 취소하셨어요.\n해당 공고는 모집중 상태로 변경됩니다."),
REVIEW_REGISTERED("이동봉사 후기 등록", "봉사 후기가 등록되었습니다.\n지금 확인해 보세요!"),
EXPIRED("이동봉사 모집 기간 만료", "모집 기간 만료로 공고가 마감되었습니다.\n아직 봉사자를 구하지 못했다면 기간을 조정해 보세요!"),
EXPIRED("이동봉사 모집 기간 만료", "모집 기간 만료로 공고가 마감되었습니다."),
COMPLETED_REQUEST("이동봉사 진행 완료", "이동봉사 진행이 완료되었나요?\n봉사 완료 버튼을 눌러주세요!"),
BEFORE_EXPIRED("공고 마감", "공고 마감이 12시간 남았어요.");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public enum NotificationType {

// 모집자
APPLICATION("신청 확인"), CANCELED("봉사 취소"), REVIEW_REGISTERED("후기 확인"), EXPIRED("모집 마감"),
COMPLETED_REQUEST("봉사 완료 요청"), BEFORE_EXPIRED("공고 마감");
COMPLETED_REQUEST("이동봉사 진행 완료"), BEFORE_EXPIRED("공고 마감");

private final String key;
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public void sendRejectNotification() {
VolunteerFcm volunteerFcm = volunteerFcmRepository.findByVolunteerId(application.getVolunteer().getId()).orElse(null);
if (volunteerFcm != null) {
fcmService.sendMessageToVolunteer(volunteerFcm.getFcmToken(), application.getVolunteer(),
application.getPost().getMainImage().getImage(), NotificationType.REJECTED, REJECT.getTitle(), REJECT.getBody());
application.getPost().getMainImage().getImage(), NotificationType.REJECTED, EXPIRED_REJECT.getTitle(), EXPIRED_REJECT.getBody());
} else {
log.info("----------모집 마감 공고 신청 반려 알림 전송 실패----------");
}
Expand Down Expand Up @@ -100,4 +100,21 @@ public void sendBeforeExpiredNotification() {
}
}
}

// 매일 오전 10시 - 이동봉사 진행 완료 요청 알림
@Scheduled(cron = "0 0 10 * * *")
public void sendCompleteRequestNotification() {
LocalDate today = LocalDate.now();
LocalDate yesterday = today.minusDays(1);
List<Application> applications = customApplicationRepository.getExpiredProgressingPosts(yesterday);
for (Application application : applications) {
IntermediaryFcm intermediaryFcm = intermediaryFcmRepository.findByIntermediaryId(application.getPost().getIntermediary().getId()).orElse(null);
if (intermediaryFcm != null) {
fcmService.sendMessageToIntermediary(intermediaryFcm.getFcmToken(), application.getIntermediary(), application.getPost().getMainImage().getImage(),
NotificationType.COMPLETED_REQUEST, COMPLETED_REQUEST.getTitle(), COMPLETED_REQUEST.getBody());
} else {
log.info("----------이동봉사 진행 완료 요청 알림 전송 실패----------");
}
}
}
}

0 comments on commit e6404a8

Please sign in to comment.