This commit is contained in:
@@ -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())
|
||||||
|
|||||||
Reference in New Issue
Block a user