NCBACK-35 add worked logic for save protected files
Test Workflow / test (push) Successful in 4s

This commit is contained in:
vladp
2026-02-16 16:05:15 +07:00
parent a25b33fe13
commit daef30ec11
3 changed files with 19 additions and 12 deletions
@@ -12,6 +12,7 @@ import ru.soune.nocopy.entity.file.ProtectionStatus;
import ru.soune.nocopy.exception.FileEntityNotFoundException; import ru.soune.nocopy.exception.FileEntityNotFoundException;
import ru.soune.nocopy.exception.NotFoundAuthToken; import ru.soune.nocopy.exception.NotFoundAuthToken;
import ru.soune.nocopy.repository.FileEntityRepository; import ru.soune.nocopy.repository.FileEntityRepository;
import ru.soune.nocopy.service.file.cloud.CloudStorageService;
import ru.soune.nocopy.service.register.AuthService; import ru.soune.nocopy.service.register.AuthService;
import ru.soune.nocopy.service.file.FileEntityService; import ru.soune.nocopy.service.file.FileEntityService;
import ru.soune.nocopy.service.file.FileStatsService; import ru.soune.nocopy.service.file.FileStatsService;
@@ -35,6 +36,8 @@ public class FileEntityHandler implements RequestHandler {
private final FileEntityRepository fileEntityRepository; private final FileEntityRepository fileEntityRepository;
private final CloudStorageService cloudStorageService;
@Override @Override
public BaseResponse handle(BaseRequest request) { public BaseResponse handle(BaseRequest request) {
try { try {
@@ -302,7 +305,7 @@ public class FileEntityHandler implements RequestHandler {
int fullDelete = fileRequest.getFullDelete() == null ? 0 : fileRequest.getFullDelete(); int fullDelete = fileRequest.getFullDelete() == null ? 0 : fileRequest.getFullDelete();
if (fileEntity.getStatus().equals(FileStatus.DELETED) || fullDelete == 1) { if (fileEntity.getStatus().equals(FileStatus.DELETED) || fullDelete == 1) {
fileEntityService.deleteFromStorageDisk(fileEntity); cloudStorageService.deleteFromStorageDisk(fileEntity);
response = DeleteFileResponse.builder() response = DeleteFileResponse.builder()
.fileId(fileRequest.getFileId()) .fileId(fileRequest.getFileId())
.message("File deleted from disk") .message("File deleted from disk")
@@ -186,13 +186,6 @@ public class FileEntityService {
fileEntityRepository.save(fileEntity); fileEntityRepository.save(fileEntity);
} }
public void deleteFromStorageDisk(FileEntity fileEntity) {
cloudStorageService.deleteFileFromStorage(fileEntity.getFilePath());
cloudStorageService.deleteFileFromStorage(fileEntity.getProtectedFilePath());
fileEntityRepository.delete(fileEntity);
}
public void deleteFromDisk(String deleteFilePath) throws IOException { public void deleteFromDisk(String deleteFilePath) throws IOException {
Files.deleteIfExists(Paths.get(deleteFilePath)); Files.deleteIfExists(Paths.get(deleteFilePath));
} }
@@ -238,7 +231,7 @@ public class FileEntityService {
List<FileEntity> fileByUserIdAndStatus = fileEntityRepository.findFileByUserIdAndStatus(userId, FileStatus.TEMP); List<FileEntity> fileByUserIdAndStatus = fileEntityRepository.findFileByUserIdAndStatus(userId, FileStatus.TEMP);
for (FileEntity fileEntity : fileByUserIdAndStatus) { for (FileEntity fileEntity : fileByUserIdAndStatus) {
deleteFromStorageDisk(fileEntity); cloudStorageService.deleteFromStorageDisk(fileEntity);
} }
} }
@@ -4,7 +4,8 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.soune.nocopy.service.file.FileEntityService; import ru.soune.nocopy.entity.file.FileEntity;
import ru.soune.nocopy.repository.FileEntityRepository;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentials; import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
@@ -26,7 +27,7 @@ import java.nio.file.Paths;
@RequiredArgsConstructor @RequiredArgsConstructor
public class CloudStorageService { public class CloudStorageService {
private final FileEntityService fileEntityService; private final FileEntityRepository fileEntityRepository;
@Value("${yandex.cloud.key}") @Value("${yandex.cloud.key}")
private String key; private String key;
@@ -66,7 +67,7 @@ public class CloudStorageService {
try { try {
s3Client.putObject(putObjectRequest, s3Client.putObject(putObjectRequest,
RequestBody.fromBytes(Files.readAllBytes(Paths.get(sendToCloudFilePath)))); RequestBody.fromBytes(Files.readAllBytes(Paths.get(sendToCloudFilePath))));
fileEntityService.deleteFromDisk(sendToCloudFilePath); Files.deleteIfExists(Paths.get(sendToCloudFilePath));
} catch (IOException e) { } catch (IOException e) {
log.error("Failed to read file: {}", filePath, e); log.error("Failed to read file: {}", filePath, e);
} }
@@ -129,4 +130,14 @@ public class CloudStorageService {
throw new RuntimeException("Failed to delete file from cloud storage: " + cloudKey, e); throw new RuntimeException("Failed to delete file from cloud storage: " + cloudKey, e);
} }
} }
public void deleteFromStorageDisk(FileEntity fileEntity) {
deleteFileFromStorage(fileEntity.getFilePath());
if (fileEntity.getProtectedFilePath() != null) {
deleteFileFromStorage(fileEntity.getProtectedFilePath());
}
fileEntityRepository.delete(fileEntity);
}
} }