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.NotFoundAuthToken;
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.file.FileEntityService;
import ru.soune.nocopy.service.file.FileStatsService;
@@ -35,6 +36,8 @@ public class FileEntityHandler implements RequestHandler {
private final FileEntityRepository fileEntityRepository;
private final CloudStorageService cloudStorageService;
@Override
public BaseResponse handle(BaseRequest request) {
try {
@@ -302,7 +305,7 @@ public class FileEntityHandler implements RequestHandler {
int fullDelete = fileRequest.getFullDelete() == null ? 0 : fileRequest.getFullDelete();
if (fileEntity.getStatus().equals(FileStatus.DELETED) || fullDelete == 1) {
fileEntityService.deleteFromStorageDisk(fileEntity);
cloudStorageService.deleteFromStorageDisk(fileEntity);
response = DeleteFileResponse.builder()
.fileId(fileRequest.getFileId())
.message("File deleted from disk")
@@ -186,13 +186,6 @@ public class FileEntityService {
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 {
Files.deleteIfExists(Paths.get(deleteFilePath));
}
@@ -238,7 +231,7 @@ public class FileEntityService {
List<FileEntity> fileByUserIdAndStatus = fileEntityRepository.findFileByUserIdAndStatus(userId, FileStatus.TEMP);
for (FileEntity fileEntity : fileByUserIdAndStatus) {
deleteFromStorageDisk(fileEntity);
cloudStorageService.deleteFromStorageDisk(fileEntity);
}
}
@@ -4,7 +4,8 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
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.AwsCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
@@ -26,7 +27,7 @@ import java.nio.file.Paths;
@RequiredArgsConstructor
public class CloudStorageService {
private final FileEntityService fileEntityService;
private final FileEntityRepository fileEntityRepository;
@Value("${yandex.cloud.key}")
private String key;
@@ -66,7 +67,7 @@ public class CloudStorageService {
try {
s3Client.putObject(putObjectRequest,
RequestBody.fromBytes(Files.readAllBytes(Paths.get(sendToCloudFilePath))));
fileEntityService.deleteFromDisk(sendToCloudFilePath);
Files.deleteIfExists(Paths.get(sendToCloudFilePath));
} catch (IOException 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);
}
}
public void deleteFromStorageDisk(FileEntity fileEntity) {
deleteFileFromStorage(fileEntity.getFilePath());
if (fileEntity.getProtectedFilePath() != null) {
deleteFileFromStorage(fileEntity.getProtectedFilePath());
}
fileEntityRepository.delete(fileEntity);
}
}