diff --git a/src/main/java/ru/soune/nocopy/handler/ImageFoundRequestHandler.java b/src/main/java/ru/soune/nocopy/handler/ImageFoundRequestHandler.java index 0533b5f..b7441d8 100644 --- a/src/main/java/ru/soune/nocopy/handler/ImageFoundRequestHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/ImageFoundRequestHandler.java @@ -137,7 +137,7 @@ public class ImageFoundRequestHandler implements RequestHandler { int page = imageSearchRequest.getPage() != null ? imageSearchRequest.getPage() : 1; int pageSize = 5; - boolean checkSimilar = imageSearchRequest.getCheckSimilarFirst() == null ? false: + boolean checkSimilar = imageSearchRequest.getCheckSimilarFirst() == null ? true: imageSearchRequest.getCheckSimilarFirst(); if (checkSimilar && !allUniqueImages.isEmpty()) { @@ -149,12 +149,14 @@ public class ImageFoundRequestHandler implements RequestHandler { tempFile = fileUploadService.downloadImageFromUrl(url); String filePath = tempFile.toAbsolutePath().toString(); - Map hash = imageHashService.calculateHash(Paths.get(filePath)); + Map hashSearchApiFile = imageHashService.calculateHash(Paths.get(filePath)); - List duplicates = fileSimilarityService.findDuplicatedByHash(hash.get("hi"), - hash.get("low")); + Map hashCheckFile = imageHashService.calculateHash(Paths.get(fileEntity.getFilePath())); - if (duplicates.isEmpty()) { + boolean hashesAreEqual = hashSearchApiFile.get("hi").equals(hashCheckFile.get("hi")) + && hashSearchApiFile.get("low").equals(hashCheckFile.get("low")); + + if (!hashesAreEqual) { return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(), "Not found similar pictures", new YandexSearchResponse()); } diff --git a/src/main/java/ru/soune/nocopy/repository/ImageSimilarityRepository.java b/src/main/java/ru/soune/nocopy/repository/ImageSimilarityRepository.java index e934173..17c4055 100644 --- a/src/main/java/ru/soune/nocopy/repository/ImageSimilarityRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/ImageSimilarityRepository.java @@ -114,5 +114,29 @@ public interface ImageSimilarityRepository List findExactDuplicates( @Param("hash64Hi") Long hash64_hi, @Param("hash64Lo") Long hash64_lo); + + @Query(value = """ + SELECT + h.hash64_hi AS hash64Hi, + h.hash64_lo AS hash64Lo, + h.file_id AS fileId, + f.user_id AS userId, + f.original_file_name AS originalFileName, + f.file_size AS fileSize, + f.stored_file_name AS similarFileId, + f.support_id AS supportId, + f.created_at AS uploadDate, + f.file_extension AS extension, + f.protection_status AS protectionStatus + FROM image_hashes h + JOIN file_entities f ON f.id = h.file_id + WHERE h.hash64_hi = :hash64Hi + AND h.hash64_lo = :hash64Lo + AND (f.status = 'TEMP') + """, + nativeQuery = true) + List findExactDuplicatesTemp( + @Param("hash64Hi") Long hash64_hi, + @Param("hash64Lo") Long hash64_lo); } diff --git a/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java b/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java index f216840..b84261c 100644 --- a/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java +++ b/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java @@ -99,7 +99,7 @@ public class FileSimilarityService { } public List findDuplicatedByHash(Long hash64Hi, Long hash64Lo) { - List duplicates = repository.findExactDuplicates(hash64Hi,hash64Lo); + List duplicates = repository.findExactDuplicatesTemp(hash64Hi,hash64Lo); if (duplicates.isEmpty()) { return new ArrayList<>();