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 19b1644..9f12527 100644 --- a/src/main/java/ru/soune/nocopy/service/search/GlobalSearchAsyncProcessor.java +++ b/src/main/java/ru/soune/nocopy/service/search/GlobalSearchAsyncProcessor.java @@ -1,5 +1,6 @@ package ru.soune.nocopy.service.search; +import jakarta.mail.MessagingException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; @@ -11,8 +12,14 @@ import ru.soune.nocopy.entity.file.FileEntity; 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.entity.tarif.TariffInfo; +import ru.soune.nocopy.entity.user.User; +import ru.soune.nocopy.exception.TariffNotFoundException; +import ru.soune.nocopy.exception.TokenNotFoundException; import ru.soune.nocopy.repository.GlobalSearchResultRepository; import ru.soune.nocopy.repository.GlobalSearchTaskRepository; +import ru.soune.nocopy.repository.UserRepository; +import ru.soune.nocopy.service.mail.EmailService; import ru.soune.nocopy.service.tariff.TariffConstants; import ru.soune.nocopy.service.tariff.TariffInfoService; import ru.soune.nocopy.service.violation.ViolationService; @@ -41,6 +48,10 @@ public class GlobalSearchAsyncProcessor { private final SearchProperties searchProperties; + private final UserRepository userRepository; + + private final EmailService emailService; + @Async @Transactional public void processFilesAsync(String taskId, List filesToProcess, Long userId) { @@ -72,12 +83,26 @@ public class GlobalSearchAsyncProcessor { } } - private GlobalSearchResult processFile(FileEntity file, String taskId, Long userId) { + private GlobalSearchResult processFile(FileEntity file, String taskId, Long userId) throws MessagingException, IOException { GlobalSearchResult result = new GlobalSearchResult(); result.setTaskId(taskId); result.setFileId(file.getId()); result.setFileName(file.getOriginalFileName()); + try { + tariffInfoService.writeOffTokens(userId, TariffConstants.TOKEN_VALUE_FOR_SEARCH); + } catch (TariffNotFoundException e) { + User user = userRepository.findById(file.getUserId()).orElseThrow(); + TariffInfo activeTariffInfo = user.getActiveTariffInfo(); + int currentTokens = activeTariffInfo.getTokens() + activeTariffInfo.getBoughtTokens(); + + emailService.sendTokensNotFoundEmail(user, currentTokens, TariffConstants.TOKEN_VALUE_FOR_SEARCH); + + result.setFileStatus(SearchStatus.FAILED.name()); + + return globalSearchResultRepository.save(result); + } + result = globalSearchResultRepository.save(result); boolean useGoogle = searchProperties.getEngines().getOrDefault("google", @@ -171,10 +196,6 @@ public class GlobalSearchAsyncProcessor { log.warn("No results for file {} because all engines are disabled", file.getId()); } else { result.setFileStatus(SearchStatus.SUCCESS.name()); - - if (!allUniqueImages.isEmpty()) { - tariffInfoService.writeOffTokens(userId, TariffConstants.TOKEN_VALUE_FOR_SEARCH); - } } return result;