From 3d2c7ecb058c83ec54903822a0decb92745ab87f Mon Sep 17 00:00:00 2001 From: vladp Date: Tue, 31 Mar 2026 13:06:27 +0700 Subject: [PATCH] dev email send when tokens not found --- .../configuration/ApplicationConfig.java | 23 +++++++++++++++++-- .../soune/nocopy/entity/file/FileEntity.java | 3 +++ .../repository/ImageSimilarityRepository.java | 2 +- .../nocopy/service/FileSimilarityService.java | 8 +++++-- 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/soune/nocopy/configuration/ApplicationConfig.java b/src/main/java/ru/soune/nocopy/configuration/ApplicationConfig.java index df4b7e1..92598e7 100644 --- a/src/main/java/ru/soune/nocopy/configuration/ApplicationConfig.java +++ b/src/main/java/ru/soune/nocopy/configuration/ApplicationConfig.java @@ -12,14 +12,22 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; +import ru.soune.nocopy.entity.file.FileEntity; +import ru.soune.nocopy.entity.file.ProtectionStatus; +import ru.soune.nocopy.repository.FileEntityRepository; +import ru.soune.nocopy.util.FileUtil; -import java.util.Collections; +import java.util.List; @Configuration @EnableAutoConfiguration @AllArgsConstructor public class ApplicationConfig { + private final FileEntityRepository fileEntityRepository; + + private final FileUtil fileUtil; + @Bean PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); @@ -36,8 +44,11 @@ public class ApplicationConfig { AudioFilePathProvider audioFilePathProvider, DocumentLocalSearch documentLocalSearch) { + List initialFiles = loadProcessingFile(); + + //TODO инициализация файлов при создании return new com.vrt.NoCopyFileService( - Collections.emptyList(), + initialFiles, fileProvider, processingListener, imageUniqueCheck, @@ -47,5 +58,13 @@ public class ApplicationConfig { documentLocalSearch ); } + + private List loadProcessingFile() { + List byProtectionStatus = + fileEntityRepository.findByProtectionStatus(ProtectionStatus.PROCESSING); + + return byProtectionStatus.stream().map(fileEntity -> + fileUtil.createFileInfo(fileEntity, null)).toList(); + } } diff --git a/src/main/java/ru/soune/nocopy/entity/file/FileEntity.java b/src/main/java/ru/soune/nocopy/entity/file/FileEntity.java index 9182674..5872a3a 100644 --- a/src/main/java/ru/soune/nocopy/entity/file/FileEntity.java +++ b/src/main/java/ru/soune/nocopy/entity/file/FileEntity.java @@ -87,6 +87,9 @@ public class FileEntity { @Column(name = "medium_path") private String mediumPath; + @Column + private String newExtension; + @OneToOne(mappedBy = "file", cascade = CascadeType.ALL, orphanRemoval = true) @JsonIgnore private ImageHashEntity imageHash; diff --git a/src/main/java/ru/soune/nocopy/repository/ImageSimilarityRepository.java b/src/main/java/ru/soune/nocopy/repository/ImageSimilarityRepository.java index 6c686f3..0a68a2a 100644 --- a/src/main/java/ru/soune/nocopy/repository/ImageSimilarityRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/ImageSimilarityRepository.java @@ -31,7 +31,7 @@ public interface ImageSimilarityRepository JOIN file_entities f ON f.id = h.file_id WHERE ref.file_id = :fileId - AND f.status = 'ACTIVE' + AND f.status IN ('ACTIVE', 'MODERATION') """, nativeQuery = true) List findCandidates( diff --git a/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java b/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java index 66f0167..bc7c66d 100644 --- a/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java +++ b/src/main/java/ru/soune/nocopy/service/FileSimilarityService.java @@ -178,7 +178,8 @@ public class FileSimilarityService { imageHashEntity.getHash64Hi(), imageHashEntity.getHash64Lo(), userIds)) .filter(dto -> levels.contains(dto.getSimilarityLevel())) - .filter(dto -> dto.getFileStatus().equals(FileStatus.ACTIVE.name())) + .filter(dto -> !dto.getOwner() && + dto.getFileStatus().equals(FileStatus.MODERATION.name())) .sorted(Comparator.comparingInt(SimilarFileDTO::getHammingDistance)) .collect(Collectors.toList()); @@ -227,6 +228,9 @@ public class FileSimilarityService { level = "DIFFERENT"; } + boolean owner = userIds.contains(similarImageProjection.getUserId()); + + return SimilarFileDTO.builder() .fileId(similarImageProjection.getId()) .ownerId(similarImageProjection.getUserId()) @@ -239,7 +243,7 @@ public class FileSimilarityService { .supportId(similarImageProjection.getSupportId()) .uploadDate(similarImageProjection.getUploadDate()) .status(similarImageProjection.getProtectionStatus()) - .owner(userIds.contains(similarImageProjection.getUserId())) + .owner(owner) // .url(baseUrl + "/api/files/protected/" + similarImageProjection.getId()) .url(baseUrl + "/api/files/protected/" + similarImageProjection.getId() + "/thumbnail") .fileStatus(similarImageProjection.getFileStatus())