diff --git a/src/main/java/ru/soune/nocopy/controller/ApiController.java b/src/main/java/ru/soune/nocopy/controller/ApiController.java index 57cca1e..d604b1e 100644 --- a/src/main/java/ru/soune/nocopy/controller/ApiController.java +++ b/src/main/java/ru/soune/nocopy/controller/ApiController.java @@ -376,6 +376,24 @@ public class ApiController { } } + @GetMapping("/protect/{fileId}") + public ResponseEntity protect( @PathVariable(required = false) String fileId) { + Optional optionalFileEntity = fileEntityRepository.findById(fileId); + + if (!optionalFileEntity.isPresent()) { + return ResponseEntity.notFound().build(); + } + FileEntity fileEntity = optionalFileEntity.get(); + FileProtector.FileInfo fileInfo = fileUtil.createFileInfo(fileEntity); + + noCopyFileService.addFile(fileInfo); + + fileEntity.setProtectionStatus(ProtectionStatus.PROCESSING); + fileEntityRepository.save(fileEntity); + + return ResponseEntity.ok().build(); + } + @GetMapping("/check/{fileId}/{type}") public ResponseEntity check(@PathVariable(required = false) String fileId, @PathVariable(required = false) String type) { diff --git a/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java b/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java index 6e3bf8d..8b5449d 100644 --- a/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java +++ b/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java @@ -8,15 +8,13 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import ru.soune.nocopy.dto.file.SimilarFileDTO; import ru.soune.nocopy.dto.file.SimilarityFilter; +import ru.soune.nocopy.entity.file.ImageHashEntity; import ru.soune.nocopy.repository.ImageHashRepository; import ru.soune.nocopy.repository.ImageSimilarityRepository; import ru.soune.nocopy.repository.SimilarImageProjection; import ru.soune.nocopy.util.FileUtil; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @Service @@ -73,8 +71,13 @@ public class FileSimilarityService { int duplicate, int similar) { List candidates = repository.findCandidates(fileId); - var imageHashEntity = hashRepository.findById(fileId) - .orElseThrow(() -> new RuntimeException("Hash not found")); + Optional hashOptional = hashRepository.findById(fileId); + + if (hashOptional.isEmpty()) { + return Collections.emptyList(); + } + + var imageHashEntity = hashOptional.get(); Long hash64Hi = imageHashEntity.getHash64Hi(); Long hash64Lo = imageHashEntity.getHash64Lo();