Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

// 사용자 1명의 추천 판정 + 알림 생성. 별도 Bean의 @Transactional이라 사용자마다 독립 트랜잭션이고,
// 커밋 뒤 NotificationPushListener가 그 사용자 푸시를 보낸다. 한 사용자의 실패가 다른 사용자에게
// 번지지 않는다(MissionRecommendationService가 사용자별로 try/catch).
// 번지지 않는다(MissionRecommendationPushService가 사용자별로 try/catch).
@Component
@RequiredArgsConstructor
public class MissionRecommendationNotifier {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down