dev add reason entity
Test Workflow / test (push) Successful in 2s

This commit is contained in:
vladp
2026-03-27 19:08:15 +07:00
parent 067b967a17
commit 0aa7f5c865
5 changed files with 19 additions and 70 deletions
@@ -98,7 +98,7 @@ public class FileEntity {
}
if (this.status == null) {
this.status = FileStatus.ACTIVE;
this.status = FileStatus.MODERATION;
}
if (this.protectionStatus == null) {
@@ -216,13 +216,13 @@ public class FileEntityHandler implements RequestHandler {
return new BaseResponse(request.getMsgId(),
MessageCode.FILE_NOT_FOUND.getCode(),
MessageCode.FILE_NOT_FOUND.getDescription(),
FileEntityResponse.builder().id(fileId));
FileEntityResponse.builder().id(fileId).build());
}
return new BaseResponse(request.getMsgId(),
MessageCode.SUCCESS.getCode(),
MessageCode.SUCCESS.getDescription(),
FileEntityResponse.builder().status(newStatus));
FileEntityResponse.builder().status(newStatus).build());
}
private BaseResponse handleSearchFiles(BaseRequest request, FileEntityRequest fileRequest) {
@@ -627,25 +627,25 @@ public class FileEntityHandler implements RequestHandler {
return new BaseResponse(request.getMsgId(),
MessageCode.SUCCESS_MODERATION.getCode(),
MessageCode.SUCCESS_MODERATION.getDescription(),
FileEntityResponse.builder().id(fileRequest.getFileId()));
FileEntityResponse.builder().id(fileRequest.getFileId()).build());
} catch (SecurityException e) {
return new BaseResponse(request.getMsgId(),
MessageCode.ACCESS_DENIED.getCode(),
MessageCode.ACCESS_DENIED.getDescription(),
FileEntityResponse.builder().id(fileRequest.getFileId()));
FileEntityResponse.builder().id(fileRequest.getFileId()).build());
} catch (FileEntityNotFoundException e) {
return new BaseResponse(request.getMsgId(),
MessageCode.FILE_NOT_FOUND.getCode(),
MessageCode.FILE_NOT_FOUND.getDescription(),
FileEntityResponse.builder()
.id(fileRequest.getFileId()));
.id(fileRequest.getFileId()).build());
} catch (IllegalStateException e) {
return new BaseResponse(request.getMsgId(),
MessageCode.ILLEGAL_STATE.getCode(),
MessageCode.ILLEGAL_STATE.getDescription(),
FileEntityResponse.builder()
.status(fileRequest.getFileStatus()));
.status(fileRequest.getFileStatus()).build());
}
}
@@ -10,6 +10,7 @@ import ru.soune.nocopy.entity.file.FileEntity;
import ru.soune.nocopy.entity.file.FileStatus;
import ru.soune.nocopy.entity.file.ProtectionStatus;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
@@ -23,6 +24,8 @@ public interface FileEntityRepository extends JpaRepository<FileEntity, String>
List<FileEntity> findByUserIdAndStatus(Long userId, FileStatus status);
List<FileEntity> findByUserIdAndStatusIn(Long userId, Collection<FileStatus> statuses);
Optional<FileEntity> findByFilePath(String filePath);
Optional<FileEntity> findByUploadSessionId(String uploadSessionId);
@@ -53,63 +53,6 @@ public class FileEntityService {
@Value("${server.baseurl}")
private String baseUrl;
@Transactional(noRollbackFor = DuplicateImageException.class)
public FileEntity createFromUploadSession(FileUploadSession session, String checksum) {
log.info("Creating FileEntity for upload session: {}", session.getUploadId());
try {
Path filePath = Paths.get(session.getFilePath());
if (!Files.exists(filePath)) {
throw new IOException("File not found on disk: " + filePath);
}
Map<String, Long> 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.getId(),
similarImageProjection.getUserId());
}
}
long fileSize = Files.size(filePath);
String originalName = session.getFileName();
String storedName = filePath.getFileName().toString();
FileEntity fileEntity = FileEntity.builder()
.userId(session.getUserId())
.originalFileName(originalName)
.storedFileName(storedName)
.filePath(session.getFilePath())
.fileSize(fileSize)
.mimeType(session.getFileType())
.fileExtension(session.getExtension())
.checksum(checksum)
.uploadSessionId(session.getUploadId())
.status(FileStatus.ACTIVE)
.build();
FileEntity saved = fileEntityRepository.save(fileEntity);
if (!imageHash.isEmpty()) {
imageHashService.create(saved, imageHash);
}
return saved;
} catch (IOException e) {
log.error("Failed to create FileEntity for session {}: {}",
session.getUploadId(), e.getMessage(), e);
throw new RuntimeException("Failed to create file entity: " + e.getMessage(), e);
}
}
@Transactional(readOnly = true)
public FileEntityResponse getById(String fileId, int version) {
FileEntity fileEntity = fileEntityRepository.findById(fileId)
@@ -144,10 +87,12 @@ public class FileEntityService {
for (Long uId : userRepository.findByCompanyId(user.getCompany().getId()).stream()
.map(User::getId)
.toList()) {
allFiles.addAll(fileEntityRepository.findByUserIdAndStatus(uId, FileStatus.ACTIVE));
allFiles.addAll(fileEntityRepository.findByUserIdAndStatusIn(uId,
List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION)));
}
} else {
allFiles = fileEntityRepository.findByUserIdAndStatus(userId, FileStatus.ACTIVE);
fileEntityRepository.findByUserIdAndStatusIn(userId,
List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION));
}
return allFiles;
@@ -162,12 +107,13 @@ public class FileEntityService {
for (Long uId : userRepository.findByCompanyId(user.getCompany().getId()).stream()
.map(User::getId)
.toList()) {
allFiles.addAll(fileEntityRepository.findByUserIdAndStatus(uId, FileStatus.ACTIVE));
allFiles.addAll(fileEntityRepository.findByUserIdAndStatusIn(uId,
List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION)));
}
} else {
allFiles = fileEntityRepository.findByUserIdAndStatus(
userId, FileStatus.ACTIVE);
allFiles = fileEntityRepository.findByUserIdAndStatusIn(userId,
List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION));
}
int start = (page - 1) * pageSize;
@@ -364,7 +364,7 @@ public class FileUploadServiceImpl implements FileUploadService {
session.setStatus(UploadStatus.COMPLETED);
session.setFilePath(finalFilePath);
FileStatus status = findSimilar == 0 ? FileStatus.ACTIVE: FileStatus.TEMP;
FileStatus status = findSimilar == 0 ? FileStatus.MODERATION: FileStatus.TEMP;
if (status == FileStatus.TEMP) {
fileEntityService.clearTempFiles(session.getUserId());