dev add violation notion
Test Workflow / test (push) Successful in 4s

This commit is contained in:
vladp
2026-03-18 15:27:43 +07:00
parent 41bc26ee94
commit 9f3430adf2
14 changed files with 726 additions and 9 deletions
@@ -0,0 +1,70 @@
package ru.soune.nocopy.scheduler;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import ru.soune.nocopy.client.YooKassaClient;
import ru.soune.nocopy.entity.tarif.Tariff;
import ru.soune.nocopy.entity.tarif.TariffInfo;
import ru.soune.nocopy.entity.user.User;
import ru.soune.nocopy.repository.TariffInfoRepository;
import ru.soune.nocopy.repository.UserRepository;
import ru.soune.nocopy.service.mail.EmailService;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
@Component
@RequiredArgsConstructor
public class PaymentScheduler {
private final TariffInfoRepository tariffInfoRepository;
private final EmailService emailService;
private final YooKassaClient yooKassaClient;
private final UserRepository userRepository;
@Scheduled(cron = "0 0 1 * * *")
@Transactional
public void processAutoRenewals() {
LocalDateTime now = LocalDateTime.now();
LocalDateTime renewalDate = now.plusDays(1);
List<TariffInfo> forRenewal = tariffInfoRepository.findForAutoRenewal(renewalDate);
for (TariffInfo tariffInfo : forRenewal) {
try {
if (tariffInfo.getPaymentMethodId() == null) {
tariffInfo.setAutoRenewal(false);
tariffInfoRepository.save(tariffInfo);
continue;
}
User user = userRepository.findByPersonalTariffInfo(tariffInfo);
boolean success = yooKassaClient.createAutoPayment(
tariffInfo.getPaymentMethodId(),
tariffInfo.getTariff().getPrice(),
"Auto-renewal " + tariffInfo.getTariff().getName(),
String.valueOf(user.getId()));
Tariff tariff = tariffInfo.getTariff();
if (success) {
tariffInfo.setStartTariff(now);
tariffInfo.setEndTariff(now.plusMonths(1));
tariffInfoRepository.save(tariffInfo);
emailService.sendAutoRenewalSuccessEmail(user, tariff.getName(), tariff.getPrice(), renewalDate);
} else {
emailService.sendAutoRenewalFailedEmail(user, tariff.getName(), tariff.getPrice());
}
} catch (Exception e) {
log.error("Error processing auto-renewal for tariffInfo: " + tariffInfo.getId(), e);
}
}
}
}