-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: 미션 독려 알림 구현 #100
feat: 미션 독려 알림 구현 #100
Conversation
default long getDaysAfterMissionCompletion(final Long memberId) { | ||
Optional<MissionMember> missionMember = findTop1ByMemberIdOrderByUpdatedAtDesc(memberId); | ||
if (missionMember.isEmpty() || !missionMember.get().isCompleted()) { | ||
return 0L; | ||
} | ||
Duration duration = Duration.between(LocalDateTime.now(), missionMember.get().getUpdatedAt()); | ||
return duration.toDays(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
지금 사용하는 부분은 아닌데
저번 회의에서 미션 끝난 지 N일 째
같은 카운트가 있어서 만들어 봤습니당
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
레디스 TTL로 푸시 제어하는거 좋다 👍
고생많았오 !!
public void save(String memberId, String deviceToken, long ttl) { | ||
LocalDate pushDate = computePushDate(); | ||
String key = makeKey(pushDate, memberId); | ||
redisTemplate.opsForValue().set(key, deviceToken, Duration.ofMillis(ttl)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
7일 내에 디바이스 토큰이 변경될 일은 없을까?!
missionMembers.forEach(missionMember -> { | ||
missionMember.updateMissionStatus(mission, memberCount); | ||
Member member = missionMember.getMember(); | ||
if (missionMember.isCompleted() && member.getDeviceToken() != null) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
missionMember.member.deviceToken 이렇게 접근하면 쿼리 �N+1 문제 있을 것 같아서 벌크로 조회한 후에 매핑해주는건 어때?
추가로 만약 알림 비활성화 여부 필드 생기면 디바이스 토큰 null 체크 조건문 변경 필요하겠습니당
다른 PR에서 리뷰 내용 반영하도록 하겠습니다!! |
Issue Number
close: #
작업 개요
(#84)
미션 완료 후 7일간 아무런 미션에 참여하지 않거나 생성하지 않은 경우, 스케줄러를 통해 독려 푸시 알림을 전송합니다.
작업 사항
MissionRetryPushJob
을 만들고 15시에 실행하도록 만들었습니다. (다른 알림과 달리 언제 보내야 한다는 요구사항이 없어 15시로 작성했습니다)MissionMember
의 상태가COMPLETED
로 변경될 때, redis에 멤버의 디바이스 토큰을 ttl을 걸어 저장했습니다.mission_retry_message:[PUSH_DATE]:[MEMBER_ID]
cancelRetryMessage
를 통해 등록한 key-value쌍을 삭제합니다.고민한 점들(필수 X)
여기에 작성하세요
스크린샷(필수 X)
여기에 작성하세요