From b905d3f20e5ddef385944f78bb9559e136879a4a Mon Sep 17 00:00:00 2001 From: Chhun-Lee Date: Sat, 12 Sep 2026 15:01:04 +0900 Subject: [PATCH] =?UTF-8?q?[Fix]#57=20domain/mission=EC=9D=98=20MissionRec?= =?UTF-8?q?ommendationService=EC=99=80=20=EB=B9=88=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=B6=A9=EB=8F=8C=20=ED=95=B4=EC=86=8C=20(MissionRecommendatio?= =?UTF-8?q?nPushService=EB=A1=9C=20=EB=B3=80=EA=B2=BD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/MissionRecommendationScheduler.java | 6 +++--- .../notification/service/MissionRecommendationNotifier.java | 2 +- ...onService.java => MissionRecommendationPushService.java} | 5 ++++- ...eTest.java => MissionRecommendationPushServiceTest.java} | 6 +++--- 4 files changed, 11 insertions(+), 8 deletions(-) rename src/main/java/com/quespot/domain/notification/service/{MissionRecommendationService.java => MissionRecommendationPushService.java} (85%) rename src/test/java/com/quespot/domain/notification/service/{MissionRecommendationServiceTest.java => MissionRecommendationPushServiceTest.java} (93%) 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);