From c487b2d26c128739214a2fdf3a23cf89adfe8744 Mon Sep 17 00:00:00 2001 From: ybchar Date: Wed, 16 Oct 2024 18:35:48 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=ED=83=88=ED=87=B4=20=EC=8B=9C=20fc?= =?UTF-8?q?m=20token=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth/application/AuthService.java | 3 +++ .../fcm/application/FcmNotificationService.java | 15 ++++++++++----- .../domain/fcm/dao/FcmTokenRepository.java | 7 +++++++ .../domain/auth/application/AuthServiceTest.java | 2 ++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/depromeet/stonebed/domain/auth/application/AuthService.java b/src/main/java/com/depromeet/stonebed/domain/auth/application/AuthService.java index 34ca3a41..bf3f4e48 100644 --- a/src/main/java/com/depromeet/stonebed/domain/auth/application/AuthService.java +++ b/src/main/java/com/depromeet/stonebed/domain/auth/application/AuthService.java @@ -9,6 +9,7 @@ import com.depromeet.stonebed.domain.auth.dto.response.SocialClientResponse; import com.depromeet.stonebed.domain.auth.dto.response.TokenPairResponse; import com.depromeet.stonebed.domain.fcm.dao.FcmNotificationRepository; +import com.depromeet.stonebed.domain.fcm.dao.FcmTokenRepository; import com.depromeet.stonebed.domain.member.dao.MemberRepository; import com.depromeet.stonebed.domain.member.domain.Member; import com.depromeet.stonebed.domain.member.domain.MemberRole; @@ -38,6 +39,7 @@ public class AuthService { private final MemberRepository memberRepository; private final MissionRecordRepository missionRecordRepository; private final MissionRecordBoostRepository missionRecordBoostRepository; + private final FcmTokenRepository fcmTokenRepository; private final AppleClient appleClient; private final KakaoClient kakaoClient; @@ -179,5 +181,6 @@ private void withdrawMemberRelationByMemberId(List recordIds, Long memberI missionRecordBoostRepository.deleteAllByMember(recordIds); missionRecordRepository.deleteAllByMember(memberId); fcmNotificationRepository.deleteAllByMember(memberId); + fcmTokenRepository.deleteAllByMember(memberId); } } diff --git a/src/main/java/com/depromeet/stonebed/domain/fcm/application/FcmNotificationService.java b/src/main/java/com/depromeet/stonebed/domain/fcm/application/FcmNotificationService.java index 7c2f8b2c..b44cc9ef 100644 --- a/src/main/java/com/depromeet/stonebed/domain/fcm/application/FcmNotificationService.java +++ b/src/main/java/com/depromeet/stonebed/domain/fcm/application/FcmNotificationService.java @@ -277,7 +277,7 @@ public void sendAndNotifications( Long sourceId, Long targetId, FcmNotificationType notificationType) { - List> batches = createBatches(tokens, BATCH_SIZE); + List> batches = createBatches(tokens); String deepLink = FcmNotification.generateDeepLink(notificationType, targetId, null); @@ -295,13 +295,18 @@ public void sendAndNotifications( notificationRepository.saveAll(notifications); } - private List> createBatches(List tokens, int batchSize) { - return IntStream.range(0, (tokens.size() + batchSize - 1) / batchSize) + private List> createBatches(List tokens) { + return IntStream.range( + 0, + (tokens.size() + FcmNotificationService.BATCH_SIZE - 1) + / FcmNotificationService.BATCH_SIZE) .mapToObj( i -> tokens.subList( - i * batchSize, - Math.min(tokens.size(), (i + 1) * batchSize))) + i * FcmNotificationService.BATCH_SIZE, + Math.min( + tokens.size(), + (i + 1) * FcmNotificationService.BATCH_SIZE))) .collect(Collectors.toList()); } diff --git a/src/main/java/com/depromeet/stonebed/domain/fcm/dao/FcmTokenRepository.java b/src/main/java/com/depromeet/stonebed/domain/fcm/dao/FcmTokenRepository.java index f89f3c32..cd7a4b44 100644 --- a/src/main/java/com/depromeet/stonebed/domain/fcm/dao/FcmTokenRepository.java +++ b/src/main/java/com/depromeet/stonebed/domain/fcm/dao/FcmTokenRepository.java @@ -7,6 +7,8 @@ import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; public interface FcmTokenRepository extends JpaRepository, FcmTokenRepositoryCustom { @@ -19,4 +21,9 @@ public interface FcmTokenRepository List findAllByUpdatedAtBefore(LocalDateTime cutoffDate); void deleteByToken(String token); + + // Delete + @Modifying + @Query("DELETE FROM FcmToken ft WHERE ft.member.id = :memberId") + void deleteAllByMember(Long memberId); } diff --git a/src/test/java/com/depromeet/stonebed/domain/auth/application/AuthServiceTest.java b/src/test/java/com/depromeet/stonebed/domain/auth/application/AuthServiceTest.java index 809c8bfe..77ff7d8e 100644 --- a/src/test/java/com/depromeet/stonebed/domain/auth/application/AuthServiceTest.java +++ b/src/test/java/com/depromeet/stonebed/domain/auth/application/AuthServiceTest.java @@ -8,6 +8,7 @@ import com.depromeet.stonebed.domain.auth.dto.response.AuthTokenResponse; import com.depromeet.stonebed.domain.auth.dto.response.TokenPairResponse; import com.depromeet.stonebed.domain.fcm.dao.FcmNotificationRepository; +import com.depromeet.stonebed.domain.fcm.dao.FcmTokenRepository; import com.depromeet.stonebed.domain.member.dao.MemberRepository; import com.depromeet.stonebed.domain.member.domain.Member; import com.depromeet.stonebed.domain.member.domain.MemberRole; @@ -38,6 +39,7 @@ class AuthServiceTest extends FixtureMonkeySetUp { @Mock private FcmNotificationRepository fcmNotificationRepository; @Mock private MissionRecordRepository missionRecordRepository; @Mock private MissionRecordBoostRepository missionRecordBoostRepository; + @Mock private FcmTokenRepository fcmTokenRepository; @Mock private MemberUtil memberUtil;