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 4778c35..1db68cf 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 1143d26..0a331d4 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; @@ -503,6 +504,16 @@ public class ModelTrainMngCoreService { 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; + } + public Long findModelStep1InProgressCnt() { return modelMngRepository.findModelStep1InProgressCnt(); } 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; + } }