You've already forked DataMate
feat: new endpoint allowing only add file path to dataset record without any FS operations (#119)
* feat: Implement add files' path only to dataset * refactor: Rename variable for clarity in metadata serialization
This commit is contained in:
@@ -19,6 +19,7 @@ import com.datamate.datamanagement.infrastructure.exception.DataManagementErrorC
|
||||
import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetFileRepository;
|
||||
import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetRepository;
|
||||
import com.datamate.datamanagement.interfaces.converter.DatasetConverter;
|
||||
import com.datamate.datamanagement.interfaces.dto.AddFilesRequest;
|
||||
import com.datamate.datamanagement.interfaces.dto.CopyFilesRequest;
|
||||
import com.datamate.datamanagement.interfaces.dto.UploadFileRequest;
|
||||
import com.datamate.datamanagement.interfaces.dto.UploadFilesPreRequest;
|
||||
@@ -344,4 +345,59 @@ public class DatasetFileApplicationService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加文件到数据集(仅创建数据库记录,不执行文件系统操作)
|
||||
*
|
||||
* @param datasetId 数据集id
|
||||
* @param req 添加文件请求
|
||||
* @return 添加的文件列表
|
||||
*/
|
||||
@Transactional
|
||||
public List<DatasetFile> addFilesToDataset(String datasetId, AddFilesRequest req) {
|
||||
Dataset dataset = datasetRepository.getById(datasetId);
|
||||
BusinessAssert.notNull(dataset, SystemErrorCode.RESOURCE_NOT_FOUND);
|
||||
List<DatasetFile> addedFiles = new ArrayList<>();
|
||||
List<DatasetFile> existDatasetFiles = datasetFileRepository.findAllByDatasetId(datasetId);
|
||||
dataset.setFiles(existDatasetFiles);
|
||||
|
||||
boolean softAdd = req.softAdd();
|
||||
String metadata;
|
||||
try {
|
||||
Map<String, Boolean> metadataMap = Map.of("softAdd", softAdd);
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
metadata = objectMapper.writeValueAsString(metadataMap);
|
||||
} catch (JsonProcessingException e) {
|
||||
log.error("Failed to serialize metadataMap", e);
|
||||
throw BusinessException.of(SystemErrorCode.UNKNOWN_ERROR);
|
||||
}
|
||||
|
||||
for (String sourceFilePath : req.sourcePaths()) {
|
||||
Path sourcePath = Paths.get(sourceFilePath);
|
||||
String fileName = sourcePath.getFileName().toString();
|
||||
File sourceFile = sourcePath.toFile();
|
||||
LocalDateTime currentTime = LocalDateTime.now();
|
||||
|
||||
DatasetFile datasetFile = DatasetFile.builder()
|
||||
.id(UUID.randomUUID().toString())
|
||||
.datasetId(datasetId)
|
||||
.fileName(fileName)
|
||||
.fileType(AnalyzerUtils.getExtension(fileName))
|
||||
.fileSize(sourceFile.length())
|
||||
.filePath(sourceFilePath)
|
||||
.uploadTime(currentTime)
|
||||
.lastAccessTime(currentTime)
|
||||
.metadata(metadata)
|
||||
.build();
|
||||
setDatasetFileId(datasetFile, dataset);
|
||||
dataset.addFile(datasetFile);
|
||||
addedFiles.add(datasetFile);
|
||||
}
|
||||
datasetFileRepository.saveOrUpdateBatch(addedFiles, 100);
|
||||
dataset.active();
|
||||
datasetRepository.updateById(dataset);
|
||||
// Note: addFilesToDataset only creates DB records, no file system operations
|
||||
// If file copy is needed, use copyFilesToDatasetDir endpoint instead
|
||||
return addedFiles;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.datamate.datamanagement.interfaces.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 添加文件请求DTO(仅创建DB记录,不执行文件系统操作)
|
||||
*
|
||||
* @author datamate
|
||||
* @since 2025-11-29
|
||||
*/
|
||||
public record AddFilesRequest(
|
||||
@NotEmpty List<String> sourcePaths,
|
||||
@NotNull Boolean softAdd
|
||||
) {
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import com.datamate.common.interfaces.PagingQuery;
|
||||
import com.datamate.datamanagement.application.DatasetFileApplicationService;
|
||||
import com.datamate.datamanagement.domain.model.dataset.DatasetFile;
|
||||
import com.datamate.datamanagement.interfaces.converter.DatasetConverter;
|
||||
import com.datamate.datamanagement.interfaces.dto.AddFilesRequest;
|
||||
import com.datamate.datamanagement.interfaces.dto.CopyFilesRequest;
|
||||
import com.datamate.datamanagement.interfaces.dto.DatasetFileResponse;
|
||||
import com.datamate.datamanagement.interfaces.dto.UploadFileRequest;
|
||||
@@ -144,4 +145,18 @@ public class DatasetFileController {
|
||||
List<DatasetFile> datasetFiles = datasetFileApplicationService.copyFilesToDatasetDir(datasetId, req);
|
||||
return DatasetConverter.INSTANCE.convertToResponseList(datasetFiles);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加文件到数据集(仅创建数据库记录,不执行文件系统操作)
|
||||
*
|
||||
* @param datasetId 数据集ID
|
||||
* @param req 添加文件请求(包含源文件路径列表和softAdd标志)
|
||||
* @return 数据集文件响应DTO列表
|
||||
*/
|
||||
@PostMapping("/upload/add")
|
||||
public List<DatasetFileResponse> addFilesToDataset(@PathVariable("datasetId") String datasetId,
|
||||
@RequestBody @Valid AddFilesRequest req) {
|
||||
List<DatasetFile> datasetFiles = datasetFileApplicationService.addFilesToDataset(datasetId, req);
|
||||
return DatasetConverter.INSTANCE.convertToResponseList(datasetFiles);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user