Skip to content

Commit d46cbdb

Browse files
committed
[Refactor] Enhance FCM token repository to prevent duplicate tokens
1 parent 2b6991b commit d46cbdb

2 files changed

Lines changed: 23 additions & 5 deletions

File tree

src/main/java/boombimapi/domain/alarm/application/service/impl/FcmServiceImpl.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,25 @@ public class FcmServiceImpl implements FcmService {
4343
public void registerToken(Member user, String token, DeviceType deviceType) {
4444
try {
4545
// 기존 토큰이 있는지 확인
46-
Optional<FcmToken> existingToken = fcmTokenRepository.findByMemberIdAndToken(user.getId(), token);
46+
// Optional<FcmToken> existingToken = fcmTokenRepository.findByMemberIdAndToken(user.getId(), token);
4747

48-
if (existingToken.isPresent()) {
48+
List<FcmToken> existingToken = fcmTokenRepository.findAllByToken(token);
49+
50+
if (!existingToken.isEmpty()) {
4951
// 기존 토큰이 있으면 활성화 및 마지막 사용 시간 업데이트
50-
FcmToken fcmToken = existingToken.get();
51-
fcmToken.activate();
52+
if (existingToken.size() == 1) {
53+
FcmToken fcmToken = existingToken.get(0);
54+
fcmToken.activate();
55+
} else {
56+
for (FcmToken findFcmToken : existingToken) {
57+
if (findFcmToken.getMember().getId().equals(user.getId())) {
58+
findFcmToken.activate();
59+
} else {
60+
fcmTokenRepository.deleteAllByMember(findFcmToken.getMember());
61+
}
62+
}
63+
}
64+
5265
log.info("기존 FCM 토큰 활성화: userId={}, deviceType={}", user.getId(), deviceType);
5366
} else {
5467
// 새로운 토큰 생성
@@ -278,7 +291,7 @@ public void cleanupOldTokens() {
278291
@Override
279292
public void deleteFcmToken(String userId) {
280293
Member member = memberRepository.findById(userId).orElse(null);
281-
if(member == null) throw new BoombimException(ErrorCode.USER_NOT_EXIST);
294+
if (member == null) throw new BoombimException(ErrorCode.USER_NOT_EXIST);
282295

283296
fcmTokenRepository.deleteAllByMember(member);
284297
}

src/main/java/boombimapi/domain/alarm/domain/repository/FcmTokenRepository.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,14 @@ public interface FcmTokenRepository extends JpaRepository<FcmToken, Long> {
3434
// 토큰으로 조회
3535
Optional<FcmToken> findByToken(String token);
3636

37+
// 중복 가능 토큰 조회 (List)
38+
List<FcmToken> findAllByToken(String token);
39+
3740
// 사용자와 토큰으로 조회
3841
Optional<FcmToken> findByMemberIdAndToken(String userId, String token);
3942

43+
44+
4045
// 비활성화된 토큰 삭제
4146
@Modifying
4247
@Query("DELETE FROM FcmToken f WHERE f.isActive = false AND f.lastUsedAt < :cutoffDate")

0 commit comments

Comments
 (0)