NCBACK-34 fix send exception
Test Workflow / test (push) Successful in 3s

This commit is contained in:
vladp
2026-01-19 15:49:27 +07:00
parent e979712b7c
commit 0c0fadf5ec
10 changed files with 206 additions and 120 deletions
@@ -9,8 +9,10 @@ import ru.soune.nocopy.dto.file.FileResponse;
import ru.soune.nocopy.entity.file.FileEntity;
import ru.soune.nocopy.entity.file.FileStatus;
import ru.soune.nocopy.entity.file.FileUploadSession;
import ru.soune.nocopy.exception.DuplicateImageException;
import ru.soune.nocopy.exception.FileEntityNotFoundException;
import ru.soune.nocopy.repository.FileEntityRepository;
import ru.soune.nocopy.repository.SimilarImageProjection;
import ru.soune.nocopy.service.FileSimilarityService;
import ru.soune.nocopy.service.ImageHashService;
@@ -20,6 +22,7 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@@ -33,7 +36,7 @@ public class FileEntityService {
private final FileSimilarityService fileSimilarityService;
@Transactional
@Transactional(noRollbackFor = DuplicateImageException.class)
public FileEntity createFromUploadSession(FileUploadSession session, String checksum) {
log.info("Creating FileEntity for upload session: {}", session.getUploadId());
@@ -44,6 +47,21 @@ public class FileEntityService {
throw new IOException("File not found on disk: " + filePath);
}
Map<String, Integer> imageHash = Map.of();
if (session.getFileType().startsWith("image")) {
imageHash = imageHashService.calculateHash(filePath);
List<SimilarImageProjection> duplicatedByHash = fileSimilarityService.findDuplicatedByHash(
imageHash.get("hi"), imageHash.get("low"));
if (!duplicatedByHash.isEmpty()) {
SimilarImageProjection similarImageProjection = duplicatedByHash.get(0);
throw new DuplicateImageException("Duplicate", similarImageProjection.getFileId(),
similarImageProjection.getUserId());
}
}
long fileSize = Files.size(filePath);
String originalName = session.getFileName();
String storedName = filePath.getFileName().toString();
@@ -63,8 +81,8 @@ public class FileEntityService {
FileEntity saved = fileEntityRepository.save(fileEntity);
if (saved.getMimeType().startsWith("image")) {
imageHashService.create(saved, Path.of(saved.getFilePath()));
if (!imageHash.isEmpty()) {
imageHashService.create(saved, imageHash);
}
return saved;