Skip to content

Commit d692f5f

Browse files
authored
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
1 parent f730bd5 commit d692f5f

File tree

3 files changed

+89
-0
lines changed

3 files changed

+89
-0
lines changed

backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetFileRepository;
2020
import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetRepository;
2121
import com.datamate.datamanagement.interfaces.converter.DatasetConverter;
22+
import com.datamate.datamanagement.interfaces.dto.AddFilesRequest;
2223
import com.datamate.datamanagement.interfaces.dto.CopyFilesRequest;
2324
import com.datamate.datamanagement.interfaces.dto.UploadFileRequest;
2425
import com.datamate.datamanagement.interfaces.dto.UploadFilesPreRequest;
@@ -344,4 +345,59 @@ private void copyFilesToDatasetDir(List<String> sourcePaths, Dataset dataset) {
344345
}
345346
}
346347
}
348+
349+
/**
350+
* 添加文件到数据集(仅创建数据库记录,不执行文件系统操作)
351+
*
352+
* @param datasetId 数据集id
353+
* @param req 添加文件请求
354+
* @return 添加的文件列表
355+
*/
356+
@Transactional
357+
public List<DatasetFile> addFilesToDataset(String datasetId, AddFilesRequest req) {
358+
Dataset dataset = datasetRepository.getById(datasetId);
359+
BusinessAssert.notNull(dataset, SystemErrorCode.RESOURCE_NOT_FOUND);
360+
List<DatasetFile> addedFiles = new ArrayList<>();
361+
List<DatasetFile> existDatasetFiles = datasetFileRepository.findAllByDatasetId(datasetId);
362+
dataset.setFiles(existDatasetFiles);
363+
364+
boolean softAdd = req.softAdd();
365+
String metadata;
366+
try {
367+
Map<String, Boolean> metadataMap = Map.of("softAdd", softAdd);
368+
ObjectMapper objectMapper = new ObjectMapper();
369+
metadata = objectMapper.writeValueAsString(metadataMap);
370+
} catch (JsonProcessingException e) {
371+
log.error("Failed to serialize metadataMap", e);
372+
throw BusinessException.of(SystemErrorCode.UNKNOWN_ERROR);
373+
}
374+
375+
for (String sourceFilePath : req.sourcePaths()) {
376+
Path sourcePath = Paths.get(sourceFilePath);
377+
String fileName = sourcePath.getFileName().toString();
378+
File sourceFile = sourcePath.toFile();
379+
LocalDateTime currentTime = LocalDateTime.now();
380+
381+
DatasetFile datasetFile = DatasetFile.builder()
382+
.id(UUID.randomUUID().toString())
383+
.datasetId(datasetId)
384+
.fileName(fileName)
385+
.fileType(AnalyzerUtils.getExtension(fileName))
386+
.fileSize(sourceFile.length())
387+
.filePath(sourceFilePath)
388+
.uploadTime(currentTime)
389+
.lastAccessTime(currentTime)
390+
.metadata(metadata)
391+
.build();
392+
setDatasetFileId(datasetFile, dataset);
393+
dataset.addFile(datasetFile);
394+
addedFiles.add(datasetFile);
395+
}
396+
datasetFileRepository.saveOrUpdateBatch(addedFiles, 100);
397+
dataset.active();
398+
datasetRepository.updateById(dataset);
399+
// Note: addFilesToDataset only creates DB records, no file system operations
400+
// If file copy is needed, use copyFilesToDatasetDir endpoint instead
401+
return addedFiles;
402+
}
347403
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.datamate.datamanagement.interfaces.dto;
2+
3+
import jakarta.validation.constraints.NotEmpty;
4+
import jakarta.validation.constraints.NotNull;
5+
6+
import java.util.List;
7+
8+
/**
9+
* 添加文件请求DTO(仅创建DB记录,不执行文件系统操作)
10+
*
11+
* @author datamate
12+
* @since 2025-11-29
13+
*/
14+
public record AddFilesRequest(
15+
@NotEmpty List<String> sourcePaths,
16+
@NotNull Boolean softAdd
17+
) {
18+
}

backend/services/data-management-service/src/main/java/com/datamate/datamanagement/interfaces/rest/DatasetFileController.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.datamate.datamanagement.application.DatasetFileApplicationService;
99
import com.datamate.datamanagement.domain.model.dataset.DatasetFile;
1010
import com.datamate.datamanagement.interfaces.converter.DatasetConverter;
11+
import com.datamate.datamanagement.interfaces.dto.AddFilesRequest;
1112
import com.datamate.datamanagement.interfaces.dto.CopyFilesRequest;
1213
import com.datamate.datamanagement.interfaces.dto.DatasetFileResponse;
1314
import com.datamate.datamanagement.interfaces.dto.UploadFileRequest;
@@ -144,4 +145,18 @@ public List<DatasetFileResponse> copyFilesToDatasetDir(@PathVariable("datasetId"
144145
List<DatasetFile> datasetFiles = datasetFileApplicationService.copyFilesToDatasetDir(datasetId, req);
145146
return DatasetConverter.INSTANCE.convertToResponseList(datasetFiles);
146147
}
148+
149+
/**
150+
* 添加文件到数据集(仅创建数据库记录,不执行文件系统操作)
151+
*
152+
* @param datasetId 数据集ID
153+
* @param req 添加文件请求(包含源文件路径列表和softAdd标志)
154+
* @return 数据集文件响应DTO列表
155+
*/
156+
@PostMapping("/upload/add")
157+
public List<DatasetFileResponse> addFilesToDataset(@PathVariable("datasetId") String datasetId,
158+
@RequestBody @Valid AddFilesRequest req) {
159+
List<DatasetFile> datasetFiles = datasetFileApplicationService.addFilesToDataset(datasetId, req);
160+
return DatasetConverter.INSTANCE.convertToResponseList(datasetFiles);
161+
}
147162
}

0 commit comments

Comments
 (0)