@@ -98,7 +98,7 @@ public class FileEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.status == null) {
|
if (this.status == null) {
|
||||||
this.status = FileStatus.ACTIVE;
|
this.status = FileStatus.MODERATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.protectionStatus == null) {
|
if (this.protectionStatus == null) {
|
||||||
|
|||||||
@@ -216,13 +216,13 @@ public class FileEntityHandler implements RequestHandler {
|
|||||||
return new BaseResponse(request.getMsgId(),
|
return new BaseResponse(request.getMsgId(),
|
||||||
MessageCode.FILE_NOT_FOUND.getCode(),
|
MessageCode.FILE_NOT_FOUND.getCode(),
|
||||||
MessageCode.FILE_NOT_FOUND.getDescription(),
|
MessageCode.FILE_NOT_FOUND.getDescription(),
|
||||||
FileEntityResponse.builder().id(fileId));
|
FileEntityResponse.builder().id(fileId).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
return new BaseResponse(request.getMsgId(),
|
return new BaseResponse(request.getMsgId(),
|
||||||
MessageCode.SUCCESS.getCode(),
|
MessageCode.SUCCESS.getCode(),
|
||||||
MessageCode.SUCCESS.getDescription(),
|
MessageCode.SUCCESS.getDescription(),
|
||||||
FileEntityResponse.builder().status(newStatus));
|
FileEntityResponse.builder().status(newStatus).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
private BaseResponse handleSearchFiles(BaseRequest request, FileEntityRequest fileRequest) {
|
private BaseResponse handleSearchFiles(BaseRequest request, FileEntityRequest fileRequest) {
|
||||||
@@ -627,25 +627,25 @@ public class FileEntityHandler implements RequestHandler {
|
|||||||
return new BaseResponse(request.getMsgId(),
|
return new BaseResponse(request.getMsgId(),
|
||||||
MessageCode.SUCCESS_MODERATION.getCode(),
|
MessageCode.SUCCESS_MODERATION.getCode(),
|
||||||
MessageCode.SUCCESS_MODERATION.getDescription(),
|
MessageCode.SUCCESS_MODERATION.getDescription(),
|
||||||
FileEntityResponse.builder().id(fileRequest.getFileId()));
|
FileEntityResponse.builder().id(fileRequest.getFileId()).build());
|
||||||
|
|
||||||
} catch (SecurityException e) {
|
} catch (SecurityException e) {
|
||||||
return new BaseResponse(request.getMsgId(),
|
return new BaseResponse(request.getMsgId(),
|
||||||
MessageCode.ACCESS_DENIED.getCode(),
|
MessageCode.ACCESS_DENIED.getCode(),
|
||||||
MessageCode.ACCESS_DENIED.getDescription(),
|
MessageCode.ACCESS_DENIED.getDescription(),
|
||||||
FileEntityResponse.builder().id(fileRequest.getFileId()));
|
FileEntityResponse.builder().id(fileRequest.getFileId()).build());
|
||||||
} catch (FileEntityNotFoundException e) {
|
} catch (FileEntityNotFoundException e) {
|
||||||
return new BaseResponse(request.getMsgId(),
|
return new BaseResponse(request.getMsgId(),
|
||||||
MessageCode.FILE_NOT_FOUND.getCode(),
|
MessageCode.FILE_NOT_FOUND.getCode(),
|
||||||
MessageCode.FILE_NOT_FOUND.getDescription(),
|
MessageCode.FILE_NOT_FOUND.getDescription(),
|
||||||
FileEntityResponse.builder()
|
FileEntityResponse.builder()
|
||||||
.id(fileRequest.getFileId()));
|
.id(fileRequest.getFileId()).build());
|
||||||
} catch (IllegalStateException e) {
|
} catch (IllegalStateException e) {
|
||||||
return new BaseResponse(request.getMsgId(),
|
return new BaseResponse(request.getMsgId(),
|
||||||
MessageCode.ILLEGAL_STATE.getCode(),
|
MessageCode.ILLEGAL_STATE.getCode(),
|
||||||
MessageCode.ILLEGAL_STATE.getDescription(),
|
MessageCode.ILLEGAL_STATE.getDescription(),
|
||||||
FileEntityResponse.builder()
|
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.FileStatus;
|
||||||
import ru.soune.nocopy.entity.file.ProtectionStatus;
|
import ru.soune.nocopy.entity.file.ProtectionStatus;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@@ -23,6 +24,8 @@ public interface FileEntityRepository extends JpaRepository<FileEntity, String>
|
|||||||
|
|
||||||
List<FileEntity> findByUserIdAndStatus(Long userId, FileStatus status);
|
List<FileEntity> findByUserIdAndStatus(Long userId, FileStatus status);
|
||||||
|
|
||||||
|
List<FileEntity> findByUserIdAndStatusIn(Long userId, Collection<FileStatus> statuses);
|
||||||
|
|
||||||
Optional<FileEntity> findByFilePath(String filePath);
|
Optional<FileEntity> findByFilePath(String filePath);
|
||||||
|
|
||||||
Optional<FileEntity> findByUploadSessionId(String uploadSessionId);
|
Optional<FileEntity> findByUploadSessionId(String uploadSessionId);
|
||||||
|
|||||||
@@ -53,63 +53,6 @@ public class FileEntityService {
|
|||||||
@Value("${server.baseurl}")
|
@Value("${server.baseurl}")
|
||||||
private String 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)
|
@Transactional(readOnly = true)
|
||||||
public FileEntityResponse getById(String fileId, int version) {
|
public FileEntityResponse getById(String fileId, int version) {
|
||||||
FileEntity fileEntity = fileEntityRepository.findById(fileId)
|
FileEntity fileEntity = fileEntityRepository.findById(fileId)
|
||||||
@@ -144,10 +87,12 @@ public class FileEntityService {
|
|||||||
for (Long uId : userRepository.findByCompanyId(user.getCompany().getId()).stream()
|
for (Long uId : userRepository.findByCompanyId(user.getCompany().getId()).stream()
|
||||||
.map(User::getId)
|
.map(User::getId)
|
||||||
.toList()) {
|
.toList()) {
|
||||||
allFiles.addAll(fileEntityRepository.findByUserIdAndStatus(uId, FileStatus.ACTIVE));
|
allFiles.addAll(fileEntityRepository.findByUserIdAndStatusIn(uId,
|
||||||
|
List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION)));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
allFiles = fileEntityRepository.findByUserIdAndStatus(userId, FileStatus.ACTIVE);
|
fileEntityRepository.findByUserIdAndStatusIn(userId,
|
||||||
|
List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION));
|
||||||
}
|
}
|
||||||
|
|
||||||
return allFiles;
|
return allFiles;
|
||||||
@@ -162,12 +107,13 @@ public class FileEntityService {
|
|||||||
for (Long uId : userRepository.findByCompanyId(user.getCompany().getId()).stream()
|
for (Long uId : userRepository.findByCompanyId(user.getCompany().getId()).stream()
|
||||||
.map(User::getId)
|
.map(User::getId)
|
||||||
.toList()) {
|
.toList()) {
|
||||||
allFiles.addAll(fileEntityRepository.findByUserIdAndStatus(uId, FileStatus.ACTIVE));
|
allFiles.addAll(fileEntityRepository.findByUserIdAndStatusIn(uId,
|
||||||
|
List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION)));
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
allFiles = fileEntityRepository.findByUserIdAndStatus(
|
allFiles = fileEntityRepository.findByUserIdAndStatusIn(userId,
|
||||||
userId, FileStatus.ACTIVE);
|
List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION));
|
||||||
}
|
}
|
||||||
|
|
||||||
int start = (page - 1) * pageSize;
|
int start = (page - 1) * pageSize;
|
||||||
|
|||||||
@@ -364,7 +364,7 @@ public class FileUploadServiceImpl implements FileUploadService {
|
|||||||
session.setStatus(UploadStatus.COMPLETED);
|
session.setStatus(UploadStatus.COMPLETED);
|
||||||
session.setFilePath(finalFilePath);
|
session.setFilePath(finalFilePath);
|
||||||
|
|
||||||
FileStatus status = findSimilar == 0 ? FileStatus.ACTIVE: FileStatus.TEMP;
|
FileStatus status = findSimilar == 0 ? FileStatus.MODERATION: FileStatus.TEMP;
|
||||||
|
|
||||||
if (status == FileStatus.TEMP) {
|
if (status == FileStatus.TEMP) {
|
||||||
fileEntityService.clearTempFiles(session.getUserId());
|
fileEntityService.clearTempFiles(session.getUserId());
|
||||||
|
|||||||
Reference in New Issue
Block a user