dev email send when tokens not found
Test Workflow / test (push) Waiting to run

This commit is contained in:
vladp
2026-03-31 13:06:27 +07:00
parent 51170891ce
commit 3d2c7ecb05
4 changed files with 31 additions and 5 deletions
@@ -12,14 +12,22 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; 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 @Configuration
@EnableAutoConfiguration @EnableAutoConfiguration
@AllArgsConstructor @AllArgsConstructor
public class ApplicationConfig { public class ApplicationConfig {
private final FileEntityRepository fileEntityRepository;
private final FileUtil fileUtil;
@Bean @Bean
PasswordEncoder passwordEncoder() { PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); return new BCryptPasswordEncoder();
@@ -36,8 +44,11 @@ public class ApplicationConfig {
AudioFilePathProvider audioFilePathProvider, AudioFilePathProvider audioFilePathProvider,
DocumentLocalSearch documentLocalSearch) { DocumentLocalSearch documentLocalSearch) {
List<FileProtector.FileInfo> initialFiles = loadProcessingFile();
//TODO инициализация файлов при создании
return new com.vrt.NoCopyFileService( return new com.vrt.NoCopyFileService(
Collections.emptyList(), initialFiles,
fileProvider, fileProvider,
processingListener, processingListener,
imageUniqueCheck, imageUniqueCheck,
@@ -47,5 +58,13 @@ public class ApplicationConfig {
documentLocalSearch documentLocalSearch
); );
} }
private List<FileProtector.FileInfo> loadProcessingFile() {
List<FileEntity> byProtectionStatus =
fileEntityRepository.findByProtectionStatus(ProtectionStatus.PROCESSING);
return byProtectionStatus.stream().map(fileEntity ->
fileUtil.createFileInfo(fileEntity, null)).toList();
}
} }
@@ -87,6 +87,9 @@ public class FileEntity {
@Column(name = "medium_path") @Column(name = "medium_path")
private String mediumPath; private String mediumPath;
@Column
private String newExtension;
@OneToOne(mappedBy = "file", cascade = CascadeType.ALL, orphanRemoval = true) @OneToOne(mappedBy = "file", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnore @JsonIgnore
private ImageHashEntity imageHash; private ImageHashEntity imageHash;
@@ -31,7 +31,7 @@ public interface ImageSimilarityRepository
JOIN file_entities f JOIN file_entities f
ON f.id = h.file_id ON f.id = h.file_id
WHERE ref.file_id = :fileId WHERE ref.file_id = :fileId
AND f.status = 'ACTIVE' AND f.status IN ('ACTIVE', 'MODERATION')
""", """,
nativeQuery = true) nativeQuery = true)
List<SimilarImageProjection> findCandidates( List<SimilarImageProjection> findCandidates(
@@ -178,7 +178,8 @@ public class FileSimilarityService {
imageHashEntity.getHash64Hi(), imageHashEntity.getHash64Hi(),
imageHashEntity.getHash64Lo(), userIds)) imageHashEntity.getHash64Lo(), userIds))
.filter(dto -> levels.contains(dto.getSimilarityLevel())) .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)) .sorted(Comparator.comparingInt(SimilarFileDTO::getHammingDistance))
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -227,6 +228,9 @@ public class FileSimilarityService {
level = "DIFFERENT"; level = "DIFFERENT";
} }
boolean owner = userIds.contains(similarImageProjection.getUserId());
return SimilarFileDTO.builder() return SimilarFileDTO.builder()
.fileId(similarImageProjection.getId()) .fileId(similarImageProjection.getId())
.ownerId(similarImageProjection.getUserId()) .ownerId(similarImageProjection.getUserId())
@@ -239,7 +243,7 @@ public class FileSimilarityService {
.supportId(similarImageProjection.getSupportId()) .supportId(similarImageProjection.getSupportId())
.uploadDate(similarImageProjection.getUploadDate()) .uploadDate(similarImageProjection.getUploadDate())
.status(similarImageProjection.getProtectionStatus()) .status(similarImageProjection.getProtectionStatus())
.owner(userIds.contains(similarImageProjection.getUserId())) .owner(owner)
// .url(baseUrl + "/api/files/protected/" + similarImageProjection.getId()) // .url(baseUrl + "/api/files/protected/" + similarImageProjection.getId())
.url(baseUrl + "/api/files/protected/" + similarImageProjection.getId() + "/thumbnail") .url(baseUrl + "/api/files/protected/" + similarImageProjection.getId() + "/thumbnail")
.fileStatus(similarImageProjection.getFileStatus()) .fileStatus(similarImageProjection.getFileStatus())