@@ -7,6 +7,8 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import ru.soune.nocopy.entity.file.FileStatus;
|
import ru.soune.nocopy.entity.file.FileStatus;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@@ -18,6 +20,9 @@ public class FileEntityRequest {
|
|||||||
@JsonProperty("file_id")
|
@JsonProperty("file_id")
|
||||||
private String fileId;
|
private String fileId;
|
||||||
|
|
||||||
|
@JsonProperty("file_ids")
|
||||||
|
private List<String> fileIds;
|
||||||
|
|
||||||
@JsonProperty("full_delete")
|
@JsonProperty("full_delete")
|
||||||
private Integer fullDelete;
|
private Integer fullDelete;
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ 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;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -79,6 +83,8 @@ public class FileEntityHandler implements RequestHandler {
|
|||||||
return handleDeleteFile(request, fileRequest);
|
return handleDeleteFile(request, fileRequest);
|
||||||
case "change_file_status":
|
case "change_file_status":
|
||||||
return handleChangeStatus(request, fileRequest);
|
return handleChangeStatus(request, fileRequest);
|
||||||
|
case "delete_files":
|
||||||
|
return handleDeleteFiles(request, fileRequest);
|
||||||
case "moderate_file":
|
case "moderate_file":
|
||||||
return handleModerateFile(request, fileRequest);
|
return handleModerateFile(request, fileRequest);
|
||||||
case "submit_appeal":
|
case "submit_appeal":
|
||||||
@@ -684,6 +690,54 @@ public class FileEntityHandler implements RequestHandler {
|
|||||||
request.getVersion()));
|
request.getVersion()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BaseResponse handleDeleteFiles(BaseRequest request, FileEntityRequest fileRequest) {
|
||||||
|
List<String> fileIds = fileRequest.getFileIds();
|
||||||
|
List<String> deletedIds = new ArrayList<>();
|
||||||
|
List<String> failedIds = new ArrayList<>();
|
||||||
|
|
||||||
|
for (String fileId : fileIds) {
|
||||||
|
try {
|
||||||
|
FileEntity fileEntity = fileEntityRepository.findById(fileId)
|
||||||
|
.orElseThrow(() -> new FileEntityNotFoundException(fileId));
|
||||||
|
|
||||||
|
deleteFileIfExists(fileEntity.getFilePath());
|
||||||
|
deleteFileIfExists(fileEntity.getProtectedFilePath());
|
||||||
|
deleteFileIfExists(fileEntity.getThumbnailPath());
|
||||||
|
deleteFileIfExists(fileEntity.getMediumPath());
|
||||||
|
|
||||||
|
deletedIds.add(fileId);
|
||||||
|
log.info("Files deleted for entity: {}", fileId);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
failedIds.add(fileId);
|
||||||
|
log.error("Failed to delete files for entity: {}", fileId, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!deletedIds.isEmpty()) {
|
||||||
|
fileEntityRepository.deleteAllById(deletedIds);
|
||||||
|
log.info("Deleted {} entities from database", deletedIds.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
|
||||||
|
MessageCode.SUCCESS.getDescription(), failedIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteFileIfExists(String filePath) {
|
||||||
|
if (filePath != null && !filePath.isEmpty()) {
|
||||||
|
try {
|
||||||
|
Path path = Paths.get(filePath);
|
||||||
|
boolean deleted = Files.deleteIfExists(path);
|
||||||
|
if (deleted) {
|
||||||
|
log.debug("Deleted file: {}", filePath);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.warn("Failed to delete file: {}", filePath, e);
|
||||||
|
throw new RuntimeException("Failed to delete file: " + filePath, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private BaseResponse handleDeleteFile(BaseRequest request, FileEntityRequest fileRequest) {
|
private BaseResponse handleDeleteFile(BaseRequest request, FileEntityRequest fileRequest) {
|
||||||
try {
|
try {
|
||||||
Long userId = authService.useUserAuthToken(fileRequest.getToken());
|
Long userId = authService.useUserAuthToken(fileRequest.getToken());
|
||||||
|
|||||||
Reference in New Issue
Block a user