From 92a16c6af3974882ded8526df6baf35e49a60458 Mon Sep 17 00:00:00 2001 From: pricelees Date: Thu, 24 Oct 2024 12:12:53 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=9E=AC=EC=A0=84=EC=86=A1?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EC=8B=A4=ED=8C=A8=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=EC=97=90=20=EB=8C=80=ED=95=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B9=85=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EA=B5=AC=EC=B2=B4?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/FcmFailedResponse.java | 17 +++++----- .../implement/fcm/FcmRetryableChecker.java | 31 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/backend/src/main/java/mouda/backend/notification/domain/FcmFailedResponse.java b/backend/src/main/java/mouda/backend/notification/domain/FcmFailedResponse.java index b96726aa..882cbd99 100644 --- a/backend/src/main/java/mouda/backend/notification/domain/FcmFailedResponse.java +++ b/backend/src/main/java/mouda/backend/notification/domain/FcmFailedResponse.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; +import java.util.stream.Collectors; import java.util.stream.IntStream; import com.google.firebase.messaging.BatchResponse; @@ -53,14 +54,10 @@ public List getFailedWith5xxTokens() { return getTokens(this::isFailedWith5xx); } - public List getNonRetryableFailedTokens() { - return getTokens(errorCode -> !isFailedWith429(errorCode) && !isFailedWith5xx(errorCode)); - } - - public List getFinallyFailedTokens() { - return failedTokens.values().stream() - .flatMap(List::stream) - .toList(); + public Map> getNonRetryableFailedTokens() { + return failedTokens.keySet().stream() + .filter(errorCode -> !isFailedWith429(errorCode) && !isFailedWith5xx(errorCode)) + .collect(Collectors.toMap(errorCode -> errorCode, failedTokens::get)); } public int getRetryAfterSeconds() { @@ -101,4 +98,8 @@ private boolean isTokenAbsent(MessagingErrorCode... errorCodes) { public boolean hasNoFailedTokens() { return failedTokens.isEmpty(); } + + public void removeFailedWith404Tokens() { + failedTokens.remove(MessagingErrorCode.UNREGISTERED); + } } diff --git a/backend/src/main/java/mouda/backend/notification/implement/fcm/FcmRetryableChecker.java b/backend/src/main/java/mouda/backend/notification/implement/fcm/FcmRetryableChecker.java index fcfcf319..ad8b856b 100644 --- a/backend/src/main/java/mouda/backend/notification/implement/fcm/FcmRetryableChecker.java +++ b/backend/src/main/java/mouda/backend/notification/implement/fcm/FcmRetryableChecker.java @@ -23,41 +23,40 @@ public class FcmRetryableChecker { @Transactional public boolean check(CommonNotification notification, FcmFailedResponse failedResponse, int attempt) { - handleNonRetryableTokens(notification, failedResponse); if (failedResponse.hasNoFailedTokens()) { log.info("No failed tokens for title: {}, body: {}.", notification.getTitle(), notification.getBody()); return false; } + return checkWhenFailedTokensExist(notification, failedResponse, attempt); + } + + private boolean checkWhenFailedTokensExist( + CommonNotification notification, FcmFailedResponse failedResponse, int attempt + ) { + removeAllUnregisteredTokens(failedResponse); if (attempt > MAX_ATTEMPT) { - log.info("Max attempt reached for title: {}, body: {}, failed: {}", notification.getTitle(), - notification.getBody(), failedResponse.getFinallyFailedTokens()); + log.info("Max attempt reached for title: {}, body: {}, tokens: {}", notification.getTitle(), + notification.getBody(), failedResponse.getFailedTokens()); return false; } if (failedResponse.hasNoRetryableTokens()) { - log.info("No retryable tokens for title: {}, body: {}.", notification.getTitle(), notification.getBody()); + log.info("No retryable tokens for title: {}, body: {}, tokens: {}", notification.getTitle(), notification.getBody(), + failedResponse.getNonRetryableFailedTokens()); return false; } return true; } - private void handleNonRetryableTokens(CommonNotification notification, FcmFailedResponse failedResponse) { - List nonRetryableFailedTokens = failedResponse.getNonRetryableFailedTokens(); - if (nonRetryableFailedTokens.isEmpty()) { - return; - } - - log.info("Cannot Retry for title: {}, body: {}, failed: {}.", notification.getTitle(), - notification.getBody(), nonRetryableFailedTokens); - removeAllUnregisteredTokens(failedResponse.getFailedWith404Tokens()); - } - - private void removeAllUnregisteredTokens(List failedWith404Tokens) { + private void removeAllUnregisteredTokens(FcmFailedResponse failedResponse) { + List failedWith404Tokens = failedResponse.getFailedWith404Tokens(); if (failedWith404Tokens.isEmpty()) { return; } + log.info("Removing all unregistered tokens: {}", failedWith404Tokens); List tokens = failedWith404Tokens.stream().map(FcmToken::getToken).toList(); fcmTokenWriter.deleteAll(tokens); + failedResponse.removeFailedWith404Tokens(); } }