diff --git a/src/main/java/ru/soune/nocopy/scheduler/MonitoringScheduler.java b/src/main/java/ru/soune/nocopy/scheduler/MonitoringScheduler.java index 442bcbe..37be081 100644 --- a/src/main/java/ru/soune/nocopy/scheduler/MonitoringScheduler.java +++ b/src/main/java/ru/soune/nocopy/scheduler/MonitoringScheduler.java @@ -7,11 +7,16 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import ru.soune.nocopy.entity.monitoring.FileMonitoringEntity; +import ru.soune.nocopy.entity.notification.NotificationType; import ru.soune.nocopy.repository.FileMonitoringRepository; import ru.soune.nocopy.service.monitoring.MonitoringSearchService; +import ru.soune.nocopy.service.notification.NotificationService; import java.time.LocalDateTime; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; @Slf4j @Component @@ -22,6 +27,8 @@ public class MonitoringScheduler { private final MonitoringSearchService monitoringSearchService; + private final NotificationService notificationService; + @Scheduled(cron = "0 1 2 * * *", zone = "Europe/Moscow") @Transactional public void processScheduledMonitoring() { @@ -29,6 +36,8 @@ public class MonitoringScheduler { LocalDateTime now = LocalDateTime.now(); List readyForRun = monitoringRepository.findReadyForRun(now); + Map> groupingFilesMonitoring = readyForRun.stream() + .collect(Collectors.groupingBy(FileMonitoringEntity::getUserId)); log.info("Found {} files ready for monitoring", readyForRun.size()); @@ -43,5 +52,10 @@ public class MonitoringScheduler { monitoringRepository.save(monitoring); } } + + Set usersForNotifications = groupingFilesMonitoring.keySet(); + for (Long userId : usersForNotifications) { + notificationService.addNotification(NotificationType.MONITORING_RESULT, userId); + } } } \ No newline at end of file diff --git a/src/main/java/ru/soune/nocopy/service/payment/PaymentService.java b/src/main/java/ru/soune/nocopy/service/payment/PaymentService.java index f4c0f22..ef5c42c 100644 --- a/src/main/java/ru/soune/nocopy/service/payment/PaymentService.java +++ b/src/main/java/ru/soune/nocopy/service/payment/PaymentService.java @@ -177,7 +177,7 @@ public class PaymentService { String reason = (String) cancellationDetails.get("reason"); payment.setCancellationReason(reason); - notificationService.addNotification(NotificationType.PAYOUT_RESULT, payment.getUser().getId(), reason); + notificationService.addNotification(NotificationType.PAYMENT_RESULT, payment.getUser().getId(), reason); } else if ("payment.waiting_for_capture".equals(eventType)) { payment.setStatus(PaymentStatus.WAITING); payment.setCancellationReason(null); @@ -190,7 +190,7 @@ public class PaymentService { String reason = (String) cancellationDetails.get("reason"); payment.setCancellationReason(reason); - notificationService.addNotification(NotificationType.PAYOUT_RESULT, payment.getUser().getId(), reason); + notificationService.addNotification(NotificationType.PAYMENT_RESULT, payment.getUser().getId(), reason); } paymentRepository.save(payment); diff --git a/src/main/java/ru/soune/nocopy/service/referral/ReferralRepoImpl.java b/src/main/java/ru/soune/nocopy/service/referral/ReferralRepoImpl.java index b02d0b4..c5493e4 100644 --- a/src/main/java/ru/soune/nocopy/service/referral/ReferralRepoImpl.java +++ b/src/main/java/ru/soune/nocopy/service/referral/ReferralRepoImpl.java @@ -11,9 +11,11 @@ import org.springframework.transaction.annotation.Transactional; import ru.soune.Referral; import ru.soune.ReferralInvitee; import ru.soune.ReferralRepo; +import ru.soune.nocopy.entity.notification.NotificationType; import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.repository.ReferralJpaRepository; import ru.soune.nocopy.repository.UserRepository; +import ru.soune.nocopy.service.notification.NotificationService; import java.lang.reflect.Constructor; @@ -31,6 +33,8 @@ public class ReferralRepoImpl implements ReferralRepo { private final UserRepository userRepository; + private final NotificationService notificationService; + @Override public @NotNull String getUserReferralLink(long userId) { ru.soune.nocopy.entity.referral.Referral referral = @@ -150,6 +154,8 @@ public class ReferralRepoImpl implements ReferralRepo { @Override public void createReferralEntity(@NotNull Referral entity) { ru.soune.nocopy.entity.referral.Referral referral = new ru.soune.nocopy.entity.referral.Referral(); + Long inviter = entity.getInviter(); + referral.setUserId(entity.getUserId()); referral.setReferralLink(entity.getReferralLink()); referral.setInviterId(entity.getInviter()); @@ -160,6 +166,10 @@ public class ReferralRepoImpl implements ReferralRepo { referral.setActive(entity.getActive()); referralRepository.save(referral); + + if (inviter != null){ + notificationService.addNotification(NotificationType.REFERRAL_REGISTERED, inviter); + } } @Override diff --git a/src/main/java/ru/soune/nocopy/service/search/GlobalSearchAsyncProcessor.java b/src/main/java/ru/soune/nocopy/service/search/GlobalSearchAsyncProcessor.java index c155366..cb6d7a2 100644 --- a/src/main/java/ru/soune/nocopy/service/search/GlobalSearchAsyncProcessor.java +++ b/src/main/java/ru/soune/nocopy/service/search/GlobalSearchAsyncProcessor.java @@ -8,11 +8,13 @@ import org.springframework.transaction.annotation.Transactional; import ru.soune.nocopy.configuration.search.SearchProperties; import ru.soune.nocopy.dto.file.YandexSearchResponse; import ru.soune.nocopy.entity.file.FileEntity; +import ru.soune.nocopy.entity.notification.NotificationType; import ru.soune.nocopy.entity.search.GlobalSearchResult; import ru.soune.nocopy.entity.search.GlobalSearchTask; import ru.soune.nocopy.entity.search.SearchStatus; import ru.soune.nocopy.repository.GlobalSearchResultRepository; import ru.soune.nocopy.repository.GlobalSearchTaskRepository; +import ru.soune.nocopy.service.notification.NotificationService; import ru.soune.nocopy.service.tariff.TariffConstants; import ru.soune.nocopy.service.tariff.TariffInfoService; import ru.soune.nocopy.service.violation.ViolationService; @@ -41,6 +43,8 @@ public class GlobalSearchAsyncProcessor { private final SearchProperties searchProperties; + private final NotificationService notificationService; + @Async @Transactional public void processFilesAsync(String taskId, List filesToProcess, Long userId) { @@ -62,6 +66,7 @@ public class GlobalSearchAsyncProcessor { task.setUpdatedAt(LocalDateTime.now()); globalSearchTaskRepository.save(task); + notificationService.addNotification(NotificationType.SEARCH_RESULT, userId); } catch (Exception e) { log.error("Global search failed for task: {}", taskId, e); diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 69a28b4..d776852 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -4,7 +4,7 @@ notification.operation.impossible=Операция невозможна notification.start.failed.now=Запуск не удался notification.start.failed.next=Запуск не удался notification.payout.result=Результат выплаты {0} -notification.payment.result=Результат оплаты {0} +notification.payment.result=Результат оплаты {0} notification.referral.deposit=Реферальный депозит notification.referral.registered=Новый реферал зарегистрирован notification.referral.activated=Реферал активирован