diff --git a/src/main/java/com/quespot/domain/notification/scheduler/MissionRecommendationScheduler.java b/src/main/java/com/quespot/domain/notification/scheduler/MissionRecommendationScheduler.java index 5db919d..33a3400 100644 --- a/src/main/java/com/quespot/domain/notification/scheduler/MissionRecommendationScheduler.java +++ b/src/main/java/com/quespot/domain/notification/scheduler/MissionRecommendationScheduler.java @@ -1,6 +1,6 @@ package com.quespot.domain.notification.scheduler; -import com.quespot.domain.notification.service.MissionRecommendationService; +import com.quespot.domain.notification.service.MissionRecommendationPushService; import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; @@ -13,13 +13,13 @@ @ConditionalOnProperty(name = "app.notification.recommendation.enabled", havingValue = "true") public class MissionRecommendationScheduler { - private final MissionRecommendationService missionRecommendationService; + private final MissionRecommendationPushService missionRecommendationPushService; @Scheduled( cron = "${app.notification.recommendation.cron}", zone = "${app.notification.recommendation.zone:Asia/Seoul}" ) public void run() { - missionRecommendationService.recommendToAll(); + missionRecommendationPushService.recommendToAll(); } } diff --git a/src/main/java/com/quespot/domain/notification/service/MissionRecommendationNotifier.java b/src/main/java/com/quespot/domain/notification/service/MissionRecommendationNotifier.java index bbbbeb0..4b28af5 100644 --- a/src/main/java/com/quespot/domain/notification/service/MissionRecommendationNotifier.java +++ b/src/main/java/com/quespot/domain/notification/service/MissionRecommendationNotifier.java @@ -19,7 +19,7 @@ // 사용자 1명의 추천 판정 + 알림 생성. 별도 Bean의 @Transactional이라 사용자마다 독립 트랜잭션이고, // 커밋 뒤 NotificationPushListener가 그 사용자 푸시를 보낸다. 한 사용자의 실패가 다른 사용자에게 -// 번지지 않는다(MissionRecommendationService가 사용자별로 try/catch). +// 번지지 않는다(MissionRecommendationPushService가 사용자별로 try/catch). @Component @RequiredArgsConstructor public class MissionRecommendationNotifier { diff --git a/src/main/java/com/quespot/domain/notification/service/MissionRecommendationService.java b/src/main/java/com/quespot/domain/notification/service/MissionRecommendationPushService.java similarity index 85% rename from src/main/java/com/quespot/domain/notification/service/MissionRecommendationService.java rename to src/main/java/com/quespot/domain/notification/service/MissionRecommendationPushService.java index 80a0d82..accd2aa 100644 --- a/src/main/java/com/quespot/domain/notification/service/MissionRecommendationService.java +++ b/src/main/java/com/quespot/domain/notification/service/MissionRecommendationPushService.java @@ -14,10 +14,13 @@ import java.util.Map; // 스케줄러 진입점. 트랜잭션을 걸지 않는다 — 사용자별 트랜잭션은 Notifier가 연다. +// 이름에 Push를 붙인 이유: domain/mission에 같은 이름의 MissionRecommendationService(#56, 추천 미션 +// 조회 API)가 있어 기본 빈 이름이 충돌했다(ConflictingBeanDefinitionException). 패키지가 달라도 +// 클래스명이 같으면 스프링 빈 이름이 겹치니 다른 도메인과 같은 클래스명을 쓰지 말 것. @Slf4j @Service @RequiredArgsConstructor -public class MissionRecommendationService { +public class MissionRecommendationPushService { private final FcmTokenRepository fcmTokenRepository; private final MissionRecommendationNotifier notifier; diff --git a/src/test/java/com/quespot/domain/notification/service/MissionRecommendationServiceTest.java b/src/test/java/com/quespot/domain/notification/service/MissionRecommendationPushServiceTest.java similarity index 93% rename from src/test/java/com/quespot/domain/notification/service/MissionRecommendationServiceTest.java rename to src/test/java/com/quespot/domain/notification/service/MissionRecommendationPushServiceTest.java index 84d7b26..0682a6a 100644 --- a/src/test/java/com/quespot/domain/notification/service/MissionRecommendationServiceTest.java +++ b/src/test/java/com/quespot/domain/notification/service/MissionRecommendationPushServiceTest.java @@ -18,14 +18,14 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -class MissionRecommendationServiceTest { +class MissionRecommendationPushServiceTest { private final FcmTokenRepository fcmTokenRepository = mock(FcmTokenRepository.class); private final MissionRecommendationNotifier notifier = mock(MissionRecommendationNotifier.class); private final NotificationRecommendationProperties properties = new NotificationRecommendationProperties(true, "0 0 11 * * *", "Asia/Seoul", 3000, 7); - private final MissionRecommendationService service = - new MissionRecommendationService(fcmTokenRepository, notifier, properties); + private final MissionRecommendationPushService service = + new MissionRecommendationPushService(fcmTokenRepository, notifier, properties); private static FcmToken located(Long userId, String token, String lat, String lng, LocalDateTime at) { FcmToken fcmToken = FcmToken.register(userId, token, DeviceType.ANDROID);