|
19 | 19 | import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetFileRepository; |
20 | 20 | import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetRepository; |
21 | 21 | import com.datamate.datamanagement.interfaces.converter.DatasetConverter; |
| 22 | +import com.datamate.datamanagement.interfaces.dto.AddFilesRequest; |
22 | 23 | import com.datamate.datamanagement.interfaces.dto.CopyFilesRequest; |
23 | 24 | import com.datamate.datamanagement.interfaces.dto.UploadFileRequest; |
24 | 25 | import com.datamate.datamanagement.interfaces.dto.UploadFilesPreRequest; |
@@ -344,4 +345,59 @@ private void copyFilesToDatasetDir(List<String> sourcePaths, Dataset dataset) { |
344 | 345 | } |
345 | 346 | } |
346 | 347 | } |
| 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 | + } |
347 | 403 | } |
0 commit comments