From 95a75e63f4b26fef191ff64fe500ab57ca7af384 Mon Sep 17 00:00:00 2001 From: teddy Date: Thu, 12 Feb 2026 16:55:10 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=84=EC=8B=9C=ED=8F=B4=EB=8D=94=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/service/ModelTrainMngService.java | 2 +- .../core/ModelTrainMngCoreService.java | 11 ++++++++ .../model/ModelDatasetMappRepository.java | 3 ++- .../ModelDatasetMappRepositoryCustom.java | 8 ++++++ .../model/ModelDatasetMappRepositoryImpl.java | 25 ++++++++++++++++++ .../cd/training/train/TrainApiController.java | 22 ++++++++++++++++ .../train/service/TrainJobService.java | 26 +++++++++++++++++++ 7 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepositoryCustom.java create mode 100644 src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepositoryImpl.java diff --git a/src/main/java/com/kamco/cd/training/model/service/ModelTrainMngService.java b/src/main/java/com/kamco/cd/training/model/service/ModelTrainMngService.java index e7a6dc1..00ac878 100644 --- a/src/main/java/com/kamco/cd/training/model/service/ModelTrainMngService.java +++ b/src/main/java/com/kamco/cd/training/model/service/ModelTrainMngService.java @@ -95,7 +95,7 @@ public class ModelTrainMngService { modelTrainMngCoreService.saveModelConfig(modelId, req.getModelConfig()); UUID tmpUuid = UUID.randomUUID(); - String raw = tmpUuid.toString().replace("-", ""); + String raw = tmpUuid.toString().toUpperCase().replace("-", ""); List uids = modelTrainMngCoreService.findDatasetUid(req.getTrainingDataset().getDatasetList()); diff --git a/src/main/java/com/kamco/cd/training/postgres/core/ModelTrainMngCoreService.java b/src/main/java/com/kamco/cd/training/postgres/core/ModelTrainMngCoreService.java index f28c1ef..7f9cb29 100644 --- a/src/main/java/com/kamco/cd/training/postgres/core/ModelTrainMngCoreService.java +++ b/src/main/java/com/kamco/cd/training/postgres/core/ModelTrainMngCoreService.java @@ -25,6 +25,7 @@ import com.kamco.cd.training.postgres.repository.model.ModelDatasetRepository; import com.kamco.cd.training.postgres.repository.model.ModelMngRepository; import com.kamco.cd.training.train.dto.TrainRunRequest; import java.time.ZonedDateTime; +import java.util.ArrayList; import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; @@ -502,4 +503,14 @@ public class ModelTrainMngCoreService { public List findDatasetUid(List datasetIds) { return datasetRepository.findDatasetUid(datasetIds); } + + public List findModelDatasetMapp(Long modelId) { + List datasetUids = new ArrayList<>(); + List entities = modelDatasetMapRepository.findByModelUid(modelId); + for (ModelDatasetMappEntity entity : entities) { + datasetUids.add(entity.getDatasetUid()); + } + + return datasetUids; + } } diff --git a/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepository.java b/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepository.java index bfc9dc6..94d541e 100644 --- a/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepository.java +++ b/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepository.java @@ -6,4 +6,5 @@ import org.springframework.stereotype.Repository; @Repository public interface ModelDatasetMappRepository - extends JpaRepository {} + extends JpaRepository, + ModelDatasetMappRepositoryCustom {} diff --git a/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepositoryCustom.java b/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepositoryCustom.java new file mode 100644 index 0000000..d6a802c --- /dev/null +++ b/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepositoryCustom.java @@ -0,0 +1,8 @@ +package com.kamco.cd.training.postgres.repository.model; + +import com.kamco.cd.training.postgres.entity.ModelDatasetMappEntity; +import java.util.List; + +public interface ModelDatasetMappRepositoryCustom { + List findByModelUid(Long modelId); +} diff --git a/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepositoryImpl.java b/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepositoryImpl.java new file mode 100644 index 0000000..b43fdc7 --- /dev/null +++ b/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDatasetMappRepositoryImpl.java @@ -0,0 +1,25 @@ +package com.kamco.cd.training.postgres.repository.model; + +import static com.kamco.cd.training.postgres.entity.QModelDatasetMappEntity.modelDatasetMappEntity; + +import com.kamco.cd.training.postgres.entity.ModelDatasetMappEntity; +import com.querydsl.jpa.impl.JPAQueryFactory; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class ModelDatasetMappRepositoryImpl implements ModelDatasetMappRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + @Override + public List findByModelUid(Long modelId) { + queryFactory + .select(modelDatasetMappEntity) + .from(modelDatasetMappEntity) + .where(modelDatasetMappEntity.modelUid.eq(modelId)); + return List.of(); + } +} diff --git a/src/main/java/com/kamco/cd/training/train/TrainApiController.java b/src/main/java/com/kamco/cd/training/train/TrainApiController.java index 58b5341..dd8607b 100644 --- a/src/main/java/com/kamco/cd/training/train/TrainApiController.java +++ b/src/main/java/com/kamco/cd/training/train/TrainApiController.java @@ -164,4 +164,26 @@ public class TrainApiController { testJobService.cancel(modelId); return ApiResponseDto.ok("ok"); } + + @Operation(summary = "데이터셋 tmp 파일생성", description = "데이터셋 tmp 파일생성 API") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "데이터셋 tmp 파일생성 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = String.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PostMapping("/create-tmp/{uuid}") + public ApiResponseDto createTmpFile( + @Parameter(description = "uuid", example = "80a0e544-36ed-4999-b705-97427f23337d") + @PathVariable + UUID uuid) { + + return ApiResponseDto.ok(trainJobService.createTmpFile(uuid)); + } } diff --git a/src/main/java/com/kamco/cd/training/train/service/TrainJobService.java b/src/main/java/com/kamco/cd/training/train/service/TrainJobService.java index ab53f79..0acad20 100644 --- a/src/main/java/com/kamco/cd/training/train/service/TrainJobService.java +++ b/src/main/java/com/kamco/cd/training/train/service/TrainJobService.java @@ -3,14 +3,17 @@ package com.kamco.cd.training.train.service; import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.training.common.enums.TrainStatusType; import com.kamco.cd.training.model.dto.ModelTrainMngDto; +import com.kamco.cd.training.model.service.TmpDatasetService; import com.kamco.cd.training.postgres.core.ModelTrainJobCoreService; import com.kamco.cd.training.postgres.core.ModelTrainMngCoreService; import com.kamco.cd.training.train.dto.ModelTrainJobQueuedEvent; import com.kamco.cd.training.train.dto.TrainRunRequest; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.time.ZonedDateTime; +import java.util.List; import java.util.Map; import java.util.UUID; import lombok.RequiredArgsConstructor; @@ -29,6 +32,7 @@ public class TrainJobService { private final DockerTrainService dockerTrainService; private final ObjectMapper objectMapper; private final ApplicationEventPublisher eventPublisher; + private final TmpDatasetService tmpDatasetService; // 학습 결과가 저장될 호스트 디렉토리 @Value("${train.docker.responseDir}") @@ -210,4 +214,26 @@ public class TrainJobService { return null; } } + + public UUID createTmpFile(UUID modelUuid) { + UUID tmpUuid = UUID.randomUUID(); + String raw = tmpUuid.toString().toUpperCase().replace("-", ""); + + Long modelId = modelTrainMngCoreService.findModelIdByUuid(modelUuid); + List datasetIds = modelTrainMngCoreService.findModelDatasetMapp(modelId); + + List uids = modelTrainMngCoreService.findDatasetUid(datasetIds); + + try { + // 데이터셋 심볼링크 생성 + Path path = tmpDatasetService.buildTmpDatasetSymlink(raw, uids); + ModelTrainMngDto.UpdateReq updateReq = new ModelTrainMngDto.UpdateReq(); + updateReq.setRequestPath(path.toString()); + modelTrainMngCoreService.updateModelMaster(modelId, updateReq); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return modelUuid; + } }