From 0aa7f5c86588282e4b50769740ec8124a776b801 Mon Sep 17 00:00:00 2001 From: vladp Date: Fri, 27 Mar 2026 19:08:15 +0700 Subject: [PATCH] dev add reason entity --- .../soune/nocopy/entity/file/FileEntity.java | 2 +- .../nocopy/handler/FileEntityHandler.java | 12 ++-- .../repository/FileEntityRepository.java | 3 + .../service/file/FileEntityService.java | 70 +++---------------- .../file/impl/FileUploadServiceImpl.java | 2 +- 5 files changed, 19 insertions(+), 70 deletions(-) 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 02104c7..9182674 100644 --- a/src/main/java/ru/soune/nocopy/entity/file/FileEntity.java +++ b/src/main/java/ru/soune/nocopy/entity/file/FileEntity.java @@ -98,7 +98,7 @@ public class FileEntity { } if (this.status == null) { - this.status = FileStatus.ACTIVE; + this.status = FileStatus.MODERATION; } if (this.protectionStatus == null) { diff --git a/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java b/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java index a254184..660ee7c 100644 --- a/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java @@ -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()); } } diff --git a/src/main/java/ru/soune/nocopy/repository/FileEntityRepository.java b/src/main/java/ru/soune/nocopy/repository/FileEntityRepository.java index 0e5e014..9d9cb0f 100644 --- a/src/main/java/ru/soune/nocopy/repository/FileEntityRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/FileEntityRepository.java @@ -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 List findByUserIdAndStatus(Long userId, FileStatus status); + List findByUserIdAndStatusIn(Long userId, Collection statuses); + Optional findByFilePath(String filePath); Optional findByUploadSessionId(String uploadSessionId); diff --git a/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java b/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java index 16e2e3b..cebce6c 100644 --- a/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java +++ b/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java @@ -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 imageHash = Map.of(); - - if (session.getFileType().startsWith("image")) { - imageHash = imageHashService.calculateHash(filePath); - List 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; diff --git a/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java b/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java index f0a8050..a0016e3 100644 --- a/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java +++ b/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java @@ -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());