From 726da25ddf1d9ec657bd5c260f0e471478270cf4 Mon Sep 17 00:00:00 2001 From: vladp Date: Fri, 20 Mar 2026 16:02:11 +0700 Subject: [PATCH] Revert "dev add violation notion" This reverts commit 4ff5c5ec1327a466b62e96901d2eb9c194004438. --- .../search/SearchProperties.java | 26 ---- .../controller/SearchSettingsController.java | 58 -------- .../dto/search/config/SearchSettingsDto.java | 11 -- .../handler/ImageFoundRequestHandler.java | 106 ++++++--------- .../service/file/FileCleanupService.java | 15 +++ .../monitoring/MonitoringSearchService.java | 93 ++++--------- .../search/GlobalSearchAsyncProcessor.java | 125 +++++++----------- .../service/search/SearchImageService.java | 58 ++++---- src/main/resources/application.yaml | 11 -- 9 files changed, 153 insertions(+), 350 deletions(-) delete mode 100644 src/main/java/ru/soune/nocopy/configuration/search/SearchProperties.java delete mode 100644 src/main/java/ru/soune/nocopy/controller/SearchSettingsController.java delete mode 100644 src/main/java/ru/soune/nocopy/dto/search/config/SearchSettingsDto.java diff --git a/src/main/java/ru/soune/nocopy/configuration/search/SearchProperties.java b/src/main/java/ru/soune/nocopy/configuration/search/SearchProperties.java deleted file mode 100644 index 3ca91ff..0000000 --- a/src/main/java/ru/soune/nocopy/configuration/search/SearchProperties.java +++ /dev/null @@ -1,26 +0,0 @@ -package ru.soune.nocopy.configuration.search; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; -import java.util.Map; - -@Data -@Component -@ConfigurationProperties(prefix = "search") -public class SearchProperties { - private Map engines; - private ProxyConfig proxy; - - @Data - public static class EngineConfig { - private boolean enabled; - } - - @Data - public static class ProxyConfig { - private boolean enabled; - private String host; - private int port; - } -} diff --git a/src/main/java/ru/soune/nocopy/controller/SearchSettingsController.java b/src/main/java/ru/soune/nocopy/controller/SearchSettingsController.java deleted file mode 100644 index d18596a..0000000 --- a/src/main/java/ru/soune/nocopy/controller/SearchSettingsController.java +++ /dev/null @@ -1,58 +0,0 @@ -package ru.soune.nocopy.controller; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import ru.soune.nocopy.configuration.search.SearchProperties; -import ru.soune.nocopy.dto.BaseResponse; -import ru.soune.nocopy.dto.search.config.SearchSettingsDto; - -import java.util.Map; - - -@Slf4j -@RestController -@RequestMapping("/api/search/settings") -@RequiredArgsConstructor -public class SearchSettingsController { - - private final SearchProperties searchProperties; - - @GetMapping - public ResponseEntity getSettings() { - SearchSettingsDto dto = new SearchSettingsDto(); - - dto.setEngines(Map.of( - "yandex", searchProperties.getEngines().get("yandex").isEnabled(), - "google", searchProperties.getEngines().get("google").isEnabled())); - - dto.setProxyEnabled(searchProperties.getProxy().isEnabled()); - - return ResponseEntity.ok().body(BaseResponse.builder() - .messageDesc("Success") - .messageBody(dto) - .build()); - } - - @PutMapping - public ResponseEntity updateSettings(@RequestBody SearchSettingsDto settings) { - if (settings.getEngines() != null) { - settings.getEngines().forEach((key, value) -> { - if (searchProperties.getEngines().containsKey(key)) { - searchProperties.getEngines().get(key).setEnabled(value); - } - }); - } - - if (settings.getProxyEnabled() != null) { - searchProperties.getProxy().setEnabled(settings.getProxyEnabled()); - } - - log.info("Settings updated: {}", settings); - - return ResponseEntity.ok().body(BaseResponse.builder() - .messageDesc("Settings updated") - .build()); - } -} diff --git a/src/main/java/ru/soune/nocopy/dto/search/config/SearchSettingsDto.java b/src/main/java/ru/soune/nocopy/dto/search/config/SearchSettingsDto.java deleted file mode 100644 index ffacfa0..0000000 --- a/src/main/java/ru/soune/nocopy/dto/search/config/SearchSettingsDto.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.soune.nocopy.dto.search.config; - - -import lombok.Data; -import java.util.Map; - -@Data -public class SearchSettingsDto { - private Map engines; - private Boolean proxyEnabled; -} diff --git a/src/main/java/ru/soune/nocopy/handler/ImageFoundRequestHandler.java b/src/main/java/ru/soune/nocopy/handler/ImageFoundRequestHandler.java index 51bb0fa..2f42428 100644 --- a/src/main/java/ru/soune/nocopy/handler/ImageFoundRequestHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/ImageFoundRequestHandler.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import ru.soune.nocopy.configuration.search.SearchProperties; import ru.soune.nocopy.dto.BaseRequest; import ru.soune.nocopy.dto.BaseResponse; import ru.soune.nocopy.dto.MessageCode; @@ -37,8 +36,6 @@ public class ImageFoundRequestHandler implements RequestHandler { private final TariffInfoService tariffInfoService; - private final SearchProperties searchProperties; - @Override public BaseResponse handle(BaseRequest request) throws Exception { ImageSearchRequest imageSearchRequest = objectMapper.convertValue(request.getMessageBody(), @@ -50,72 +47,47 @@ public class ImageFoundRequestHandler implements RequestHandler { .orElseThrow(() -> { throw new NotValidFieldException("File not found", new BaseResponse(20007, MessageCode.FILE_NOT_FOUND.getCode(), MessageCode.FILE_NOT_FOUND.getDescription(), - Map.of("fileId", fileId)));}); - - List allYandexImages = new ArrayList<>(); - List allGoogleImages = new ArrayList<>(); - boolean hasTimeout = false; - - boolean useGoogle = searchProperties.getEngines().getOrDefault("google", - new SearchProperties.EngineConfig()).isEnabled(); - boolean useYandex = searchProperties.getEngines().getOrDefault("yandex", - new SearchProperties.EngineConfig()).isEnabled(); - - log.info("Search settings: useGoogle={}, useYandex={}", useGoogle, useYandex); - - if (useGoogle) { - try { - String searchResponseGoogle = searchImageService.searchReverseByPublicUrl(fileEntity, "google_lens", - "exact_matches"); - log.info("searchResponseGoogle OK"); - allGoogleImages = searchImageService.getAllImagesWithoutPagination( - searchResponseGoogle, "exact_matches"); - } catch (TimeoutException e) { - log.warn("Google search timeout for file {}", fileId); - hasTimeout = true; - } catch (IOException e) { - log.error("Google search failed for file {}", fileId, e); - } - } else { - log.info("Google search is disabled by settings"); - } - - if (useYandex) { - try { - String searchResponseYandex = searchImageService.searchReverseByPublicUrl(fileEntity, "yandex_reverse_image", - "visual_matches"); - log.info("searchResponseYandex OK"); - allYandexImages = searchImageService.getAllImagesWithoutPagination( - searchResponseYandex, "visual_matches"); - } catch (TimeoutException e) { - log.warn("Yandex search timeout for file {}", fileId); - hasTimeout = true; - } catch (IOException e) { - log.error("Yandex search failed for file {}", fileId, e); - } - } else { - log.info("Yandex search is disabled by settings"); - } - - if (allYandexImages.isEmpty() && allGoogleImages.isEmpty()) { - log.warn("No results from any search engine"); - String errorMessage = useGoogle || useYandex ? "No results found" : "All search engines are disabled"; - - return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), - errorMessage, new YandexSearchResponse()); - } + Map.of("fileId",fileId))); + }); + String searchResponseYandex; +// String searchResponseGoogle; + List allYandexImages = new ArrayList<>(); +// List allGoogleImages = new ArrayList<>(); List allUniqueImages; - if (useGoogle && useYandex) { - allUniqueImages = searchImageService.removeDuplicateUrls(allYandexImages, allGoogleImages); - log.info("Merged results from both engines: {} unique images", allUniqueImages.size()); - } else if (useGoogle) { - allUniqueImages = allGoogleImages; - log.info("Results only from Google: {} images", allUniqueImages.size()); - } else { - allUniqueImages = allYandexImages; - log.info("Results only from Yandex: {} images", allUniqueImages.size()); - } + boolean hasTimeout = false; +// +// try { +// searchResponseGoogle = searchImageService.searchReverseByPublicUrl(fileEntity, "google_lens", +// "exact_matches"); +// log.info("searchResponseGoogle OK,{}", searchResponseGoogle); +// allGoogleImages = searchImageService.getAllImagesWithoutPagination( +// searchResponseGoogle, "exact_matches"); +// +// } catch (TimeoutException e) { +// log.warn("Google search timeout for file {}", fileId); +// hasTimeout = true; +// } catch (IOException e) { +// log.error("Google search failed for file {}", fileId, e); +// } + + try { + searchResponseYandex = searchImageService.searchReverseByPublicUrl(fileEntity, "yandex_reverse_image", + "visual_matches"); + log.info("searchResponseYandex OK"); + allYandexImages = searchImageService.getAllImagesWithoutPagination( + searchResponseYandex, "visual_matches"); + } catch (TimeoutException e) { + log.warn("Yandex search timeout for file {}", fileId); + hasTimeout = true; + } catch (IOException e) { + log.error("Yandex search failed for file {}", fileId, e); + } + +// allUniqueImages = searchImageService.removeDuplicateUrls(allYandexImages, allGoogleImages); +// allUniqueImages = allGoogleImages; + allUniqueImages = allYandexImages; + log.info("allUniqueImages OK: {} images", allUniqueImages.size()); tariffInfoService.writeOffTokens(fileEntity.getUserId(), TariffConstants.TOKEN_VALUE_FOR_SEARCH); checkCounterService.incrementCheckCount(fileEntity.getUserId(), fileEntity.getMimeType()); diff --git a/src/main/java/ru/soune/nocopy/service/file/FileCleanupService.java b/src/main/java/ru/soune/nocopy/service/file/FileCleanupService.java index 7d90acb..18bf37c 100644 --- a/src/main/java/ru/soune/nocopy/service/file/FileCleanupService.java +++ b/src/main/java/ru/soune/nocopy/service/file/FileCleanupService.java @@ -34,6 +34,8 @@ public class FileCleanupService { public void cleanupExpiredFiles() { log.info("Starting cleanup of expired temporary files"); +// cleanupOldPeriods(); + Path tempDir = Paths.get(basePath, "temp"); if (!Files.exists(tempDir)) { return; @@ -83,4 +85,17 @@ public class FileCleanupService { log.error("Error during cleanup", e); } } + + private void cleanupOldPeriods() { + LocalDate thirtyDaysAgo = LocalDate.now().minusDays(30); + + List checks = protectedFileCheckRepository.findByPeriodStartDateBefore(thirtyDaysAgo); + + for (ProtectedFileCheck check : checks) { + check.cleanupOldData(); + } + + protectedFileCheckRepository.saveAll(checks); + log.info("Cleaned up {} old protection usage records", checks.size()); + } } diff --git a/src/main/java/ru/soune/nocopy/service/monitoring/MonitoringSearchService.java b/src/main/java/ru/soune/nocopy/service/monitoring/MonitoringSearchService.java index 93f43f3..0b11018 100644 --- a/src/main/java/ru/soune/nocopy/service/monitoring/MonitoringSearchService.java +++ b/src/main/java/ru/soune/nocopy/service/monitoring/MonitoringSearchService.java @@ -5,11 +5,11 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ru.soune.nocopy.configuration.search.SearchProperties; import ru.soune.nocopy.dto.file.YandexSearchResponse; import ru.soune.nocopy.dto.tarriff.TariffDTO; import ru.soune.nocopy.entity.monitoring.FileMonitoringEntity; import ru.soune.nocopy.entity.monitoring.MonitoringType; +import ru.soune.nocopy.entity.search.GlobalSearchResult; import ru.soune.nocopy.entity.tarif.TariffInfo; import ru.soune.nocopy.entity.tarif.TariffType; import ru.soune.nocopy.entity.user.User; @@ -24,7 +24,6 @@ import ru.soune.nocopy.service.violation.ViolationService; import java.io.IOException; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeoutException; @@ -46,8 +45,6 @@ public class MonitoringSearchService { private final ViolationService violationService; - private final SearchProperties searchProperties; - @Transactional public void processFileSearch(FileMonitoringEntity monitoring) throws MessagingException, IOException { monitoring.setLastRun(LocalDateTime.now()); @@ -56,78 +53,36 @@ public class MonitoringSearchService { MonitoringType monitoringType = monitoring.getMonitoringType(); TariffDTO tariffMonitoring = tariffService.getTariffByType(TariffType.valueOf(monitoringType.name())); - try { tariffInfoService.writeOffTokens(monitoring.getUserId(), tariffMonitoring.getTokens()); - boolean useYandex = searchProperties.getEngines().getOrDefault("yandex", - new SearchProperties.EngineConfig()).isEnabled(); - boolean useGoogle = searchProperties.getEngines().getOrDefault("google", - new SearchProperties.EngineConfig()).isEnabled(); + String yandexResponse = searchImageService.searchReverseByPublicUrl( + monitoring.getFile(), "yandex_reverse_image", "visual_matches"); - log.info("Monitoring search settings: useYandex={}, useGoogle={}", useYandex, useGoogle); + List yandexImages = + searchImageService.getAllImagesWithoutPagination(yandexResponse, "visual_matches"); - List allResults = new ArrayList<>(); - - if (useYandex) { - try { - String yandexResponse = searchImageService.searchReverseByPublicUrl( - monitoring.getFile(), "yandex_reverse_image", "visual_matches"); - - List yandexImages = - searchImageService.getAllImagesWithoutPagination(yandexResponse, "visual_matches"); - - allResults.addAll(yandexImages); - log.info("Yandex search found {} results", yandexImages.size()); - - } catch (TimeoutException e) { - log.warn("Yandex search timeout for monitoring file {}", monitoring.getFile().getId()); - } catch (IOException e) { - log.error("Yandex search failed for monitoring file {}", monitoring.getFile().getId(), e); - } - } else { - log.info("Yandex search is disabled by settings"); - } - - if (useGoogle) { - try { - String googleResponse = searchImageService.searchReverseByPublicUrl( - monitoring.getFile(), "google_lens", "exact_matches"); - - List googleImages = - searchImageService.getAllImagesWithoutPagination(googleResponse, "exact_matches"); - - allResults.addAll(googleImages); - log.info("Google search found {} results", googleImages.size()); - - } catch (TimeoutException e) { - log.warn("Google search timeout for monitoring file {}", monitoring.getFile().getId()); - } catch (IOException e) { - log.error("Google search failed for monitoring file {}", monitoring.getFile().getId(), e); - } - } else { - log.info("Google search is disabled by settings"); - } - - List uniqueResults = allResults; - if (useYandex && useGoogle) { - uniqueResults = searchImageService.removeDuplicateUrls( - useYandex ? allResults : new ArrayList<>(), - useGoogle ? allResults : new ArrayList<>() - ); - log.info("After deduplication: {} unique results", uniqueResults.size()); - } - - for (YandexSearchResponse.ImageResult imageResult : uniqueResults) { + for (YandexSearchResponse.ImageResult imageResult : yandexImages) { violationService.processViolation(imageResult, monitoring.getFile(), null); } +// try { +// String googleResponse = searchImageService.searchReverseByPublicUrl( +// monitoring.getFile(), "google_lens", "exact_matches"); +// +// List googleImages = +// searchImageService.getAllImagesWithoutPagination(googleResponse, "exact_matches"); +// +// +// for (YandexSearchResponse.ImageResult imageResult : googleImages) { +// violationService.processViolation(imageResult, monitoring.getFile(), null); +// } +// +// } catch (TimeoutException | IOException e) { +// log.warn("Google search failed"); +// } + monitoring.setLastRunStatus("SUCCESS"); - - if (uniqueResults.isEmpty()) { - log.info("No results found for monitoring file {}", monitoring.getFile().getId()); - } - } catch (TariffNotFoundException e) { User user = userRepository.findById(monitoring.getUserId()).orElseThrow(); TariffInfo activeTariffInfo = user.getActiveTariffInfo(); @@ -136,12 +91,10 @@ public class MonitoringSearchService { emailService.sendTokensNotFoundEmail(user, currentTokens, tariffMonitoring.getTokens()); monitoring.setLastRunStatus("ERROR: " + e.getMessage()); updateNextRun(monitoring); + monitoringRepository.save(monitoring); - } catch (Exception e) { - log.error("Error processing monitoring search", e); monitoring.setLastRunStatus("ERROR: " + e.getMessage()); - } finally { updateNextRun(monitoring); monitoringRepository.save(monitoring); 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..9f202c4 100644 --- a/src/main/java/ru/soune/nocopy/service/search/GlobalSearchAsyncProcessor.java +++ b/src/main/java/ru/soune/nocopy/service/search/GlobalSearchAsyncProcessor.java @@ -1,18 +1,21 @@ package ru.soune.nocopy.service.search; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.vrt.fileprotection.image.ImageCheckResult; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; 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.search.GlobalSearchResult; import ru.soune.nocopy.entity.search.GlobalSearchTask; import ru.soune.nocopy.entity.search.SearchStatus; +import ru.soune.nocopy.entity.violation.Violation; import ru.soune.nocopy.repository.GlobalSearchResultRepository; import ru.soune.nocopy.repository.GlobalSearchTaskRepository; +import ru.soune.nocopy.repository.ViolationRepository; import ru.soune.nocopy.service.tariff.TariffConstants; import ru.soune.nocopy.service.tariff.TariffInfoService; import ru.soune.nocopy.service.violation.ViolationService; @@ -33,13 +36,15 @@ public class GlobalSearchAsyncProcessor { private final SearchImageService searchImageService; + private final ObjectMapper objectMapper; + private final TariffInfoService tariffInfoService; private final GlobalSearchTaskRepository globalSearchTaskRepository; - private final ViolationService violationService; + private final ViolationRepository violationRepository; - private final SearchProperties searchProperties; + private final ViolationService violationService; @Async @Transactional @@ -80,85 +85,52 @@ public class GlobalSearchAsyncProcessor { result = globalSearchResultRepository.save(result); - boolean useGoogle = searchProperties.getEngines().getOrDefault("google", - new SearchProperties.EngineConfig()).isEnabled(); - boolean useYandex = searchProperties.getEngines().getOrDefault("yandex", - new SearchProperties.EngineConfig()).isEnabled(); - - log.info("Global search settings for file {}: useGoogle={}, useYandex={}", - file.getId(), useGoogle, useYandex); - - List googleImages = new ArrayList<>(); +// List googleImages = new ArrayList<>(); List yandexImages = new ArrayList<>(); - List allResults = new ArrayList<>(); + List allUniqueImages = new ArrayList<>(); boolean hasTimeout = false; - if (useGoogle) { - try { - String searchResponseGoogle = searchImageService.searchReverseByPublicUrl( - file, "google_lens", "exact_matches"); +// try { +// String searchResponseGoogle = searchImageService.searchReverseByPublicUrl( +// file, "google_lens", "exact_matches"); +// +// googleImages = searchImageService.getAllImagesWithoutPagination(searchResponseGoogle, +// "exact_matches"); +// +// allUniqueImages.addAll(googleImages); +// log.info("Google search OK for file {}", file.getId()); +// +// } catch (TimeoutException e) { +// log.warn("Google search timeout for file {}", file.getId()); +// hasTimeout = true; +// } catch (IOException e) { +// log.error("Google search failed for file {}", file.getId(), e); +// } - googleImages = searchImageService.getAllImagesWithoutPagination(searchResponseGoogle, - "exact_matches"); + try { + String searchResponseYandex = searchImageService.searchReverseByPublicUrl( + file, "yandex_reverse_image", "visual_matches"); - allResults.addAll(googleImages); - log.info("Google search OK for file {}, found {} results", file.getId(), googleImages.size()); + yandexImages = + searchImageService.getAllImagesWithoutPagination(searchResponseYandex, "visual_matches"); - } catch (TimeoutException e) { - log.warn("Google search timeout for file {}", file.getId()); - hasTimeout = true; - } catch (IOException e) { - log.error("Google search failed for file {}", file.getId(), e); - } - } else { - log.info("Google search is disabled by settings for file {}", file.getId()); + allUniqueImages.addAll(yandexImages); + log.info("Yandex search OK for file {}", file.getId()); + + } catch (TimeoutException e) { + log.warn("Yandex search timeout for file {}", file.getId()); + hasTimeout = true; + } catch (IOException e) { + log.error("Yandex search failed for file {}", file.getId(), e); } - if (useYandex) { - try { - String searchResponseYandex = searchImageService.searchReverseByPublicUrl( - file, "yandex_reverse_image", "visual_matches"); +// allUniqueImages = searchImageService.removeDuplicateUrls( +// allUniqueImages.stream() +// .filter(img -> img.getUrl() != null) +// .collect(Collectors.toList()), +// new ArrayList<>()); - yandexImages = searchImageService.getAllImagesWithoutPagination(searchResponseYandex, "visual_matches"); - - allResults.addAll(yandexImages); - log.info("Yandex search OK for file {}, found {} results", file.getId(), yandexImages.size()); - - } catch (TimeoutException e) { - log.warn("Yandex search timeout for file {}", file.getId()); - hasTimeout = true; - } catch (IOException e) { - log.error("Yandex search failed for file {}", file.getId(), e); - } - } else { - log.info("Yandex search is disabled by settings for file {}", file.getId()); - } - - List allUniqueImages; - if (useGoogle && useYandex) { - allUniqueImages = searchImageService.removeDuplicateUrls( - yandexImages.stream() - .filter(img -> img.getUrl() != null) - .collect(Collectors.toList()), - googleImages.stream() - .filter(img -> img.getUrl() != null) - .collect(Collectors.toList()) - ); - log.info("Merged results from both engines: {} unique images", allUniqueImages.size()); - } else if (useGoogle) { - allUniqueImages = googleImages.stream() - .filter(img -> img.getUrl() != null) - .collect(Collectors.toList()); - log.info("Results only from Google: {} images", allUniqueImages.size()); - } else if (useYandex) { - allUniqueImages = yandexImages.stream() - .filter(img -> img.getUrl() != null) - .collect(Collectors.toList()); - log.info("Results only from Yandex: {} images", allUniqueImages.size()); - } else { - allUniqueImages = new ArrayList<>(); - log.warn("All search engines are disabled for file {}", file.getId()); - } + allUniqueImages = yandexImages; for (YandexSearchResponse.ImageResult imageResult : allUniqueImages) { violationService.processViolation(imageResult, file, result); @@ -166,15 +138,10 @@ public class GlobalSearchAsyncProcessor { if (allUniqueImages.isEmpty() && hasTimeout) { result.setFileStatus(SearchStatus.TIMEOUT.name()); - } else if (allUniqueImages.isEmpty() && (!useGoogle && !useYandex)) { - result.setFileStatus(SearchStatus.FAILED.name()); - 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); - } + tariffInfoService.writeOffTokens(userId, TariffConstants.TOKEN_VALUE_FOR_SEARCH); } return result; diff --git a/src/main/java/ru/soune/nocopy/service/search/SearchImageService.java b/src/main/java/ru/soune/nocopy/service/search/SearchImageService.java index 2aa67dd..c9ad65f 100644 --- a/src/main/java/ru/soune/nocopy/service/search/SearchImageService.java +++ b/src/main/java/ru/soune/nocopy/service/search/SearchImageService.java @@ -8,7 +8,6 @@ import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import ru.soune.nocopy.configuration.search.SearchProperties; import ru.soune.nocopy.dto.BaseResponse; import ru.soune.nocopy.dto.MessageCode; import ru.soune.nocopy.dto.file.YandexSearchResponse; @@ -24,15 +23,40 @@ import java.util.concurrent.*; @Slf4j @Service - public class SearchImageService { private final ObjectMapper objectMapper; - private final SearchProperties searchProperties; + private final OkHttpClient yandexHttpClient; + + private final OkHttpClient googleHttpClient; + + public SearchImageService() { + Proxy proxy = new Proxy(Proxy.Type.HTTP, + new InetSocketAddress("193.46.217.94", 3128)); + + this.yandexHttpClient = new OkHttpClient.Builder() + .proxy(proxy) + .connectTimeout(35, TimeUnit.SECONDS) + .writeTimeout(35, TimeUnit.SECONDS) + .readTimeout(35, TimeUnit.SECONDS) + .callTimeout(35, TimeUnit.SECONDS) + .followRedirects(true) + .followSslRedirects(true) + .retryOnConnectionFailure(true) + .build(); + + this.googleHttpClient = new OkHttpClient.Builder() +// .proxy(proxy) + .connectTimeout(35, TimeUnit.SECONDS) + .writeTimeout(35, TimeUnit.SECONDS) + .readTimeout(35, TimeUnit.SECONDS) + .callTimeout(35, TimeUnit.SECONDS) + .followRedirects(true) + .followSslRedirects(true) + .retryOnConnectionFailure(true) + .build(); - public SearchImageService(SearchProperties searchProperties) { - this.searchProperties = searchProperties; this.objectMapper = new ObjectMapper(); } @@ -89,34 +113,12 @@ public class SearchImageService { return mimeType != null && mimeType.startsWith("image"); } - private OkHttpClient createHttpClient(boolean useProxy) { - OkHttpClient.Builder builder = new OkHttpClient.Builder() - .connectTimeout(35, TimeUnit.SECONDS) - .writeTimeout(35, TimeUnit.SECONDS) - .readTimeout(35, TimeUnit.SECONDS) - .callTimeout(35, TimeUnit.SECONDS) - .followRedirects(true) - .followSslRedirects(true) - .retryOnConnectionFailure(true); - - if (useProxy && searchProperties.getProxy().isEnabled()) { - Proxy proxy = new Proxy(Proxy.Type.HTTP, - new InetSocketAddress(searchProperties.getProxy().getHost(), - searchProperties.getProxy().getPort())); - builder.proxy(proxy); - } - - return builder.build(); - } - private String callReverseImageApiByUrl(String imageUrl, String engine, String searchType) throws IOException { if (searchApiKey == null || searchApiKey.isBlank()) { throw new IllegalStateException("SearchAPI key not configured"); } - boolean useProxy = searchProperties.getProxy().isEnabled(); - - OkHttpClient client = createHttpClient(useProxy); + OkHttpClient client = engine.contains("yandex_reverse_image") ? yandexHttpClient : googleHttpClient; HttpUrl url = HttpUrl.parse("https://www.searchapi.io/api/v1/search") .newBuilder() diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 43f3b9a..a0d6d5a 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -107,17 +107,6 @@ searchapi: api-key: ${SEARCHAPI_API_KEY:5jyYZC8jSaxhZTwjMUhwtAXi} reverse-image-url: "https://searchapi.io/api/v1/search" -search: - engines: - yandex: - enabled: true - google: - enabled: false - proxy: - enabled: true - host: "193.46.217.94" - port: 3128 - yookassa: secret-key: test_0Yns_0NHV5GJf6ypJ5HC4NSfnLO8SJkw-1PwrVWsDl4 shop-id: 1276731