hyperparam_with_modeltype

This commit is contained in:
2026-02-12 19:16:13 +09:00
parent b0cf9e77ec
commit 5455da1e96
4 changed files with 169 additions and 176 deletions

View File

@@ -101,8 +101,9 @@ public class HyperParamApiController {
LocalDate endDate, LocalDate endDate,
@Parameter(description = "버전명", example = "G_000001") @RequestParam(required = false) @Parameter(description = "버전명", example = "G_000001") @RequestParam(required = false)
String hyperVer, String hyperVer,
@Parameter(description = "버전명", example = "G1,G2,G3") @RequestParam(required = false) ModelType model @Parameter(description = "버전명", example = "G1,G2,G3") @RequestParam(required = false)
, @Parameter( ModelType model,
@Parameter(
description = "정렬", description = "정렬",
example = "createdDttm desc", example = "createdDttm desc",
schema = schema =

View File

@@ -50,15 +50,15 @@ public class HyperParamCoreService {
/** /**
* 하이퍼파라미터 수정 * 하이퍼파라미터 수정
* *
* @param uuid uuid * @param uuid uuid
* @param createReq 등록 요청 * @param createReq 등록 요청
* @return ver * @return ver
*/ */
public String updateHyperParam(UUID uuid, HyperParam createReq) { public String updateHyperParam(UUID uuid, HyperParam createReq) {
ModelHyperParamEntity entity = ModelHyperParamEntity entity =
hyperParamRepository hyperParamRepository
.findHyperParamByUuid(uuid) .findHyperParamByUuid(uuid)
.orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND)); .orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
if (entity.getIsDefault()) { if (entity.getIsDefault()) {
throw new CustomApiException("UNPROCESSABLE_ENTITY_UPDATE", HttpStatus.UNPROCESSABLE_ENTITY); throw new CustomApiException("UNPROCESSABLE_ENTITY_UPDATE", HttpStatus.UNPROCESSABLE_ENTITY);
@@ -79,9 +79,9 @@ public class HyperParamCoreService {
*/ */
public void deleteHyperParam(UUID uuid) { public void deleteHyperParam(UUID uuid) {
ModelHyperParamEntity entity = ModelHyperParamEntity entity =
hyperParamRepository hyperParamRepository
.findHyperParamByUuid(uuid) .findHyperParamByUuid(uuid)
.orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND)); .orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
// if (entity.getHyperVer().equals("HPs_0001")) { // if (entity.getHyperVer().equals("HPs_0001")) {
// throw new CustomApiException("UNPROCESSABLE_ENTITY", HttpStatus.UNPROCESSABLE_ENTITY); // throw new CustomApiException("UNPROCESSABLE_ENTITY", HttpStatus.UNPROCESSABLE_ENTITY);
@@ -104,10 +104,10 @@ public class HyperParamCoreService {
*/ */
public HyperParamDto.Basic getInitHyperParam(ModelType model) { public HyperParamDto.Basic getInitHyperParam(ModelType model) {
ModelHyperParamEntity entity = ModelHyperParamEntity entity =
hyperParamRepository hyperParamRepository.getHyperparamByType(model).stream()
.getHyperparamByType(model) .filter(e -> e.getIsDefault() == Boolean.TRUE)
.stream().filter(e -> e.getIsDefault() == Boolean.TRUE) .findFirst()
.findFirst().orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND)); .orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
return entity.toDto(); return entity.toDto();
} }
@@ -118,9 +118,9 @@ public class HyperParamCoreService {
*/ */
public HyperParamDto.Basic getHyperParam(UUID uuid) { public HyperParamDto.Basic getHyperParam(UUID uuid) {
ModelHyperParamEntity entity = ModelHyperParamEntity entity =
hyperParamRepository hyperParamRepository
.findHyperParamByUuid(uuid) .findHyperParamByUuid(uuid)
.orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND)); .orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
return entity.toDto(); return entity.toDto();
} }
@@ -143,16 +143,16 @@ public class HyperParamCoreService {
*/ */
public String getFirstHyperParamVersion(ModelType model) { public String getFirstHyperParamVersion(ModelType model) {
return hyperParamRepository return hyperParamRepository
.findHyperParamVerByModelType(model) .findHyperParamVerByModelType(model)
.map(ModelHyperParamEntity::getHyperVer) .map(ModelHyperParamEntity::getHyperVer)
.map(ver -> increase(ver, model)) .map(ver -> increase(ver, model))
.orElse(model.name() + "_000001"); .orElse(model.name() + "_000001");
} }
/** /**
* 하이퍼 파라미터의 버전을 증가시킨다. * 하이퍼 파라미터의 버전을 증가시킨다.
* *
* @param hyperVer 현재 버전 * @param hyperVer 현재 버전
* @param modelType 모델 타입 * @param modelType 모델 타입
* @return 증가된 버전 * @return 증가된 버전
*/ */

View File

@@ -65,9 +65,9 @@ public class ModelTrainMngCoreService {
*/ */
public void deleteModel(UUID uuid) { public void deleteModel(UUID uuid) {
ModelMasterEntity entity = ModelMasterEntity entity =
modelMngRepository modelMngRepository
.findByUuid(uuid) .findByUuid(uuid)
.orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND)); .orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
entity.setDelYn(true); entity.setDelYn(true);
entity.setUpdatedDttm(ZonedDateTime.now()); entity.setUpdatedDttm(ZonedDateTime.now());
entity.setUpdatedUid(userUtil.getId()); entity.setUpdatedUid(userUtil.getId());
@@ -86,15 +86,16 @@ public class ModelTrainMngCoreService {
// 최적화 파라미터는 모델 type의 디폴트사용 // 최적화 파라미터는 모델 type의 디폴트사용
if (HyperParamSelectType.OPTIMIZED.getId().equals(addReq.getHyperParamType())) { if (HyperParamSelectType.OPTIMIZED.getId().equals(addReq.getHyperParamType())) {
ModelType modelType = ModelType.getValueData(addReq.getModelNo()); ModelType modelType = ModelType.getValueData(addReq.getModelNo());
hyperParamEntity = hyperParamRepository.getHyperparamByType(modelType) hyperParamEntity =
.stream() hyperParamRepository.getHyperparamByType(modelType).stream()
.filter(e -> e.getIsDefault() == Boolean.TRUE) .filter(e -> e.getIsDefault() == Boolean.TRUE)
.findFirst().orElse(null); .findFirst()
.orElse(null);
// hyperParamEntity = hyperParamRepository.findByHyperVer("HPs_0001").orElse(null); // hyperParamEntity = hyperParamRepository.findByHyperVer("HPs_0001").orElse(null);
} else { } else {
hyperParamEntity = hyperParamEntity =
hyperParamRepository.findHyperParamByUuid(addReq.getHyperUuid()).orElse(null); hyperParamRepository.findHyperParamByUuid(addReq.getHyperUuid()).orElse(null);
} }
if (hyperParamEntity == null || hyperParamEntity.getHyperVer() == null) { if (hyperParamEntity == null || hyperParamEntity.getHyperVer() == null) {
@@ -102,8 +103,8 @@ public class ModelTrainMngCoreService {
} }
String modelVer = String modelVer =
String.join( String.join(
".", addReq.getModelNo(), hyperParamEntity.getHyperVer(), entity.getUuid().toString()); ".", addReq.getModelNo(), hyperParamEntity.getHyperVer(), entity.getUuid().toString());
entity.setModelVer(modelVer); entity.setModelVer(modelVer);
entity.setHyperParamId(hyperParamEntity.getId()); entity.setHyperParamId(hyperParamEntity.getId());
entity.setModelNo(addReq.getModelNo()); entity.setModelNo(addReq.getModelNo());
@@ -135,7 +136,7 @@ public class ModelTrainMngCoreService {
* data set 저장 * data set 저장
* *
* @param modelId 저장한 모델 학습 id * @param modelId 저장한 모델 학습 id
* @param addReq 요청 파라미터 * @param addReq 요청 파라미터
*/ */
public void saveModelDataset(Long modelId, ModelTrainMngDto.AddReq addReq) { public void saveModelDataset(Long modelId, ModelTrainMngDto.AddReq addReq) {
TrainingDataset dataset = addReq.getTrainingDataset(); TrainingDataset dataset = addReq.getTrainingDataset();
@@ -168,9 +169,9 @@ public class ModelTrainMngCoreService {
*/ */
public void updateModelMaster(Long modelId, ModelTrainMngDto.UpdateReq req) { public void updateModelMaster(Long modelId, ModelTrainMngDto.UpdateReq req) {
ModelMasterEntity entity = ModelMasterEntity entity =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND)); .orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
if (req.getRequestPath() != null && !req.getRequestPath().isEmpty()) { if (req.getRequestPath() != null && !req.getRequestPath().isEmpty()) {
entity.setRequestPath(req.getRequestPath()); entity.setRequestPath(req.getRequestPath());
} }
@@ -183,7 +184,7 @@ public class ModelTrainMngCoreService {
/** /**
* 모델 데이터셋 mapping 테이블 저장 * 모델 데이터셋 mapping 테이블 저장
* *
* @param modelId 모델학습 id * @param modelId 모델학습 id
* @param datasetList 선택한 data set * @param datasetList 선택한 data set
*/ */
public void saveModelDatasetMap(Long modelId, List<Long> datasetList) { public void saveModelDatasetMap(Long modelId, List<Long> datasetList) {
@@ -200,7 +201,7 @@ public class ModelTrainMngCoreService {
* 모델학습 config 저장 * 모델학습 config 저장
* *
* @param modelId 모델학습 id * @param modelId 모델학습 id
* @param req 요청 파라미터 * @param req 요청 파라미터
* @return * @return
*/ */
public void saveModelConfig(Long modelId, ModelTrainMngDto.ModelConfig req) { public void saveModelConfig(Long modelId, ModelTrainMngDto.ModelConfig req) {
@@ -220,7 +221,7 @@ public class ModelTrainMngCoreService {
/** /**
* 데이터셋 매핑 생성 * 데이터셋 매핑 생성
* *
* @param modelUid 모델 UID * @param modelUid 모델 UID
* @param datasetIds 데이터셋 ID 목록 * @param datasetIds 데이터셋 ID 목록
*/ */
public void createDatasetMappings(Long modelUid, List<Long> datasetIds) { public void createDatasetMappings(Long modelUid, List<Long> datasetIds) {
@@ -242,8 +243,8 @@ public class ModelTrainMngCoreService {
public ModelMasterEntity findByUuid(UUID uuid) { public ModelMasterEntity findByUuid(UUID uuid) {
try { try {
return modelMngRepository return modelMngRepository
.findByUuid(uuid) .findByUuid(uuid)
.orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND)); .orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
throw new BadRequestException("잘못된 UUID 형식입니다: " + uuid); throw new BadRequestException("잘못된 UUID 형식입니다: " + uuid);
} }
@@ -257,9 +258,9 @@ public class ModelTrainMngCoreService {
*/ */
public Long findModelIdByUuid(UUID uuid) { public Long findModelIdByUuid(UUID uuid) {
ModelMasterEntity entity = ModelMasterEntity entity =
modelMngRepository modelMngRepository
.findByUuid(uuid) .findByUuid(uuid)
.orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND)); .orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
return entity.getId(); return entity.getId();
} }
@@ -272,8 +273,8 @@ public class ModelTrainMngCoreService {
public ModelConfigDto.Basic findModelConfigByModelId(UUID uuid) { public ModelConfigDto.Basic findModelConfigByModelId(UUID uuid) {
ModelMasterEntity modelEntity = findByUuid(uuid); ModelMasterEntity modelEntity = findByUuid(uuid);
return modelConfigRepository return modelConfigRepository
.findModelConfigByModelId(modelEntity.getId()) .findModelConfigByModelId(modelEntity.getId())
.orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND)); .orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND));
} }
/** /**
@@ -304,21 +305,19 @@ public class ModelTrainMngCoreService {
*/ */
public ModelTrainMngDto.Basic findModelById(Long id) { public ModelTrainMngDto.Basic findModelById(Long id) {
ModelMasterEntity entity = ModelMasterEntity entity =
modelMngRepository modelMngRepository
.findById(id) .findById(id)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + id)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + id));
return entity.toDto(); return entity.toDto();
} }
/** /** 마스터를 IN_PROGRESS로 전환하고, 현재 실행 jobId를 연결 - UI/중단/상태조회 모두 currentAttemptId를 기준으로 동작 */
* 마스터를 IN_PROGRESS로 전환하고, 현재 실행 jobId를 연결 - UI/중단/상태조회 모두 currentAttemptId를 기준으로 동작
*/
@Transactional @Transactional
public void markInProgress(Long modelId, Long jobId) { public void markInProgress(Long modelId, Long jobId) {
ModelMasterEntity master = ModelMasterEntity master =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
master.setStatusCd(TrainStatusType.IN_PROGRESS.getId()); master.setStatusCd(TrainStatusType.IN_PROGRESS.getId());
master.setCurrentAttemptId(jobId); master.setCurrentAttemptId(jobId);
@@ -326,54 +325,46 @@ public class ModelTrainMngCoreService {
// 필요하면 시작시간도 여기서 찍어줌 // 필요하면 시작시간도 여기서 찍어줌
} }
/** /** 마지막 에러 메시지 초기화 - 재시작/새 실행 때 이전 에러 흔적 제거 */
* 마지막 에러 메시지 초기화 - 재시작/새 실행 때 이전 에러 흔적 제거
*/
@Transactional @Transactional
public void clearLastError(Long modelId) { public void clearLastError(Long modelId) {
ModelMasterEntity master = ModelMasterEntity master =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
master.setLastError(null); master.setLastError(null);
} }
/** /** 중단 처리(옵션) - cancel에서 쓰려고 하면 같이 구현 */
* 중단 처리(옵션) - cancel에서 쓰려고 하면 같이 구현
*/
@Transactional @Transactional
public void markStopped(Long modelId) { public void markStopped(Long modelId) {
ModelMasterEntity master = ModelMasterEntity master =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
master.setStatusCd(TrainStatusType.STOPPED.getId()); master.setStatusCd(TrainStatusType.STOPPED.getId());
} }
/** /** 완료 처리(옵션) - Worker가 성공 시 호출 */
* 완료 처리(옵션) - Worker가 성공 시 호출
*/
@Transactional @Transactional
public void markCompleted(Long modelId) { public void markCompleted(Long modelId) {
ModelMasterEntity master = ModelMasterEntity master =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
master.setStatusCd(TrainStatusType.COMPLETED.getId()); master.setStatusCd(TrainStatusType.COMPLETED.getId());
} }
/** /** step 1오류 처리(옵션) - Worker가 실패 시 호출 */
* step 1오류 처리(옵션) - Worker가 실패 시 호출
*/
@Transactional @Transactional
public void markError(Long modelId, String errorMessage) { public void markError(Long modelId, String errorMessage) {
ModelMasterEntity master = ModelMasterEntity master =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
master.setStatusCd(TrainStatusType.ERROR.getId()); master.setStatusCd(TrainStatusType.ERROR.getId());
master.setStep1State(TrainStatusType.ERROR.getId()); master.setStep1State(TrainStatusType.ERROR.getId());
@@ -382,15 +373,13 @@ public class ModelTrainMngCoreService {
master.setUpdatedDttm(ZonedDateTime.now()); master.setUpdatedDttm(ZonedDateTime.now());
} }
/** /** step 2오류 처리(옵션) - Worker가 실패 시 호출 */
* step 2오류 처리(옵션) - Worker가 실패 시 호출
*/
@Transactional @Transactional
public void markStep2Error(Long modelId, String errorMessage) { public void markStep2Error(Long modelId, String errorMessage) {
ModelMasterEntity master = ModelMasterEntity master =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
master.setStatusCd(TrainStatusType.ERROR.getId()); master.setStatusCd(TrainStatusType.ERROR.getId());
master.setStep2State(TrainStatusType.ERROR.getId()); master.setStep2State(TrainStatusType.ERROR.getId());
@@ -402,9 +391,9 @@ public class ModelTrainMngCoreService {
@Transactional @Transactional
public void markSuccess(Long modelId) { public void markSuccess(Long modelId) {
ModelMasterEntity master = ModelMasterEntity master =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
// 모델 상태 완료 처리 // 모델 상태 완료 처리
master.setStatusCd(TrainStatusType.COMPLETED.getId()); master.setStatusCd(TrainStatusType.COMPLETED.getId());
@@ -432,9 +421,9 @@ public class ModelTrainMngCoreService {
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
public void markStep1InProgress(Long modelId, Long jobId) { public void markStep1InProgress(Long modelId, Long jobId) {
ModelMasterEntity entity = ModelMasterEntity entity =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
entity.setStatusCd(TrainStatusType.IN_PROGRESS.getId()); entity.setStatusCd(TrainStatusType.IN_PROGRESS.getId());
entity.setStep1StrtDttm(ZonedDateTime.now()); entity.setStep1StrtDttm(ZonedDateTime.now());
@@ -452,9 +441,9 @@ public class ModelTrainMngCoreService {
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
public void markStep2InProgress(Long modelId, Long jobId) { public void markStep2InProgress(Long modelId, Long jobId) {
ModelMasterEntity entity = ModelMasterEntity entity =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
entity.setStatusCd(TrainStatusType.IN_PROGRESS.getId()); entity.setStatusCd(TrainStatusType.IN_PROGRESS.getId());
entity.setStep2StrtDttm(ZonedDateTime.now()); entity.setStep2StrtDttm(ZonedDateTime.now());
@@ -472,9 +461,9 @@ public class ModelTrainMngCoreService {
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
public void markStep1Success(Long modelId) { public void markStep1Success(Long modelId) {
ModelMasterEntity entity = ModelMasterEntity entity =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
entity.setStatusCd(TrainStatusType.COMPLETED.getId()); entity.setStatusCd(TrainStatusType.COMPLETED.getId());
entity.setStep1State(TrainStatusType.COMPLETED.getId()); entity.setStep1State(TrainStatusType.COMPLETED.getId());
@@ -491,9 +480,9 @@ public class ModelTrainMngCoreService {
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
public void markStep2Success(Long modelId) { public void markStep2Success(Long modelId) {
ModelMasterEntity entity = ModelMasterEntity entity =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
entity.setStatusCd(TrainStatusType.COMPLETED.getId()); entity.setStatusCd(TrainStatusType.COMPLETED.getId());
entity.setStep2State(TrainStatusType.COMPLETED.getId()); entity.setStep2State(TrainStatusType.COMPLETED.getId());
@@ -504,9 +493,9 @@ public class ModelTrainMngCoreService {
public void updateModelMasterBestEpoch(Long modelId, int epoch) { public void updateModelMasterBestEpoch(Long modelId, int epoch) {
ModelMasterEntity entity = ModelMasterEntity entity =
modelMngRepository modelMngRepository
.findById(modelId) .findById(modelId)
.orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId)); .orElseThrow(() -> new IllegalArgumentException("Model not found: " + modelId));
entity.setBestEpoch(epoch); entity.setBestEpoch(epoch);
} }

View File

@@ -34,56 +34,56 @@ public class HyperParamRepositoryImpl implements HyperParamRepositoryCustom {
public Optional<ModelHyperParamEntity> findHyperParamVer() { public Optional<ModelHyperParamEntity> findHyperParamVer() {
return Optional.ofNullable( return Optional.ofNullable(
queryFactory queryFactory
.select(modelHyperParamEntity) .select(modelHyperParamEntity)
.from(modelHyperParamEntity) .from(modelHyperParamEntity)
.where(modelHyperParamEntity.delYn.isFalse()) .where(modelHyperParamEntity.delYn.isFalse())
.orderBy(modelHyperParamEntity.hyperVer.desc()) .orderBy(modelHyperParamEntity.hyperVer.desc())
.limit(1) .limit(1)
.fetchOne()); .fetchOne());
} }
@Override @Override
public Optional<ModelHyperParamEntity> findHyperParamVerByModelType(ModelType modelType) { public Optional<ModelHyperParamEntity> findHyperParamVerByModelType(ModelType modelType) {
return Optional.ofNullable( return Optional.ofNullable(
queryFactory queryFactory
.select(modelHyperParamEntity) .select(modelHyperParamEntity)
.from(modelHyperParamEntity) .from(modelHyperParamEntity)
.where( .where(
modelHyperParamEntity modelHyperParamEntity
.delYn .delYn
.isFalse() .isFalse()
.and(modelHyperParamEntity.modelType.eq(modelType))) .and(modelHyperParamEntity.modelType.eq(modelType)))
.orderBy(modelHyperParamEntity.hyperVer.desc()) .orderBy(modelHyperParamEntity.hyperVer.desc())
.limit(1) .limit(1)
.fetchOne()); .fetchOne());
} }
@Override @Override
public Optional<ModelHyperParamEntity> findHyperParamByHyperVer(String hyperVer) { public Optional<ModelHyperParamEntity> findHyperParamByHyperVer(String hyperVer) {
return Optional.ofNullable( return Optional.ofNullable(
queryFactory queryFactory
.select(modelHyperParamEntity) .select(modelHyperParamEntity)
.from(modelHyperParamEntity) .from(modelHyperParamEntity)
.where( .where(
modelHyperParamEntity modelHyperParamEntity
.delYn .delYn
.isFalse() .isFalse()
.and(modelHyperParamEntity.hyperVer.eq(hyperVer))) .and(modelHyperParamEntity.hyperVer.eq(hyperVer)))
.limit(1) .limit(1)
.fetchOne()); .fetchOne());
} }
@Override @Override
public Optional<ModelHyperParamEntity> findHyperParamByUuid(UUID uuid) { public Optional<ModelHyperParamEntity> findHyperParamByUuid(UUID uuid) {
return Optional.ofNullable( return Optional.ofNullable(
queryFactory queryFactory
.select(modelHyperParamEntity) .select(modelHyperParamEntity)
.from(modelHyperParamEntity) .from(modelHyperParamEntity)
.where(modelHyperParamEntity.delYn.isFalse().and(modelHyperParamEntity.uuid.eq(uuid))) .where(modelHyperParamEntity.delYn.isFalse().and(modelHyperParamEntity.uuid.eq(uuid)))
.fetchOne()); .fetchOne());
} }
@Override @Override
@@ -119,28 +119,28 @@ public class HyperParamRepositoryImpl implements HyperParamRepositoryCustom {
} }
NumberExpression<Long> totalUseCnt = NumberExpression<Long> totalUseCnt =
modelHyperParamEntity modelHyperParamEntity
.m1UseCnt .m1UseCnt
.coalesce(0L) .coalesce(0L)
.add(modelHyperParamEntity.m2UseCnt.coalesce(0L)) .add(modelHyperParamEntity.m2UseCnt.coalesce(0L))
.add(modelHyperParamEntity.m3UseCnt.coalesce(0L)); .add(modelHyperParamEntity.m3UseCnt.coalesce(0L));
JPAQuery<HyperParamDto.List> query = JPAQuery<HyperParamDto.List> query =
queryFactory queryFactory
.select( .select(
Projections.constructor( Projections.constructor(
HyperParamDto.List.class, HyperParamDto.List.class,
modelHyperParamEntity.uuid, modelHyperParamEntity.uuid,
modelHyperParamEntity.modelType.as("model"), modelHyperParamEntity.modelType.as("model"),
modelHyperParamEntity.hyperVer, modelHyperParamEntity.hyperVer,
modelHyperParamEntity.createdDttm, modelHyperParamEntity.createdDttm,
modelHyperParamEntity.lastUsedDttm, modelHyperParamEntity.lastUsedDttm,
modelHyperParamEntity.m1UseCnt, modelHyperParamEntity.m1UseCnt,
modelHyperParamEntity.m2UseCnt, modelHyperParamEntity.m2UseCnt,
modelHyperParamEntity.m3UseCnt, modelHyperParamEntity.m3UseCnt,
totalUseCnt.as("totalUseCnt"))) totalUseCnt.as("totalUseCnt")))
.from(modelHyperParamEntity) .from(modelHyperParamEntity)
.where(builder); .where(builder);
Sort.Order sortOrder = pageable.getSort().stream().findFirst().orElse(null); Sort.Order sortOrder = pageable.getSort().stream().findFirst().orElse(null);
@@ -152,15 +152,17 @@ public class HyperParamRepositoryImpl implements HyperParamRepositoryCustom {
boolean asc = sortOrder.isAscending(); boolean asc = sortOrder.isAscending();
switch (property) { switch (property) {
case "createdDttm" -> query.orderBy( case "createdDttm" ->
asc query.orderBy(
? modelHyperParamEntity.createdDttm.asc() asc
: modelHyperParamEntity.createdDttm.desc()); ? modelHyperParamEntity.createdDttm.asc()
: modelHyperParamEntity.createdDttm.desc());
case "lastUsedDttm" -> query.orderBy( case "lastUsedDttm" ->
asc query.orderBy(
? modelHyperParamEntity.lastUsedDttm.asc() asc
: modelHyperParamEntity.lastUsedDttm.desc()); ? modelHyperParamEntity.lastUsedDttm.asc()
: modelHyperParamEntity.lastUsedDttm.desc());
case "totalUseCnt" -> query.orderBy(asc ? totalUseCnt.asc() : totalUseCnt.desc()); case "totalUseCnt" -> query.orderBy(asc ? totalUseCnt.asc() : totalUseCnt.desc());
@@ -169,14 +171,14 @@ public class HyperParamRepositoryImpl implements HyperParamRepositoryCustom {
} }
List<HyperParamDto.List> content = List<HyperParamDto.List> content =
query.offset(pageable.getOffset()).limit(pageable.getPageSize()).fetch(); query.offset(pageable.getOffset()).limit(pageable.getPageSize()).fetch();
Long total = Long total =
queryFactory queryFactory
.select(modelHyperParamEntity.count()) .select(modelHyperParamEntity.count())
.from(modelHyperParamEntity) .from(modelHyperParamEntity)
.where(builder) .where(builder)
.fetchOne(); .fetchOne();
long totalCount = (total != null) ? total : 0L; long totalCount = (total != null) ? total : 0L;
@@ -186,12 +188,13 @@ public class HyperParamRepositoryImpl implements HyperParamRepositoryCustom {
@Override @Override
public List<ModelHyperParamEntity> getHyperparamByType(ModelType modelType) { public List<ModelHyperParamEntity> getHyperparamByType(ModelType modelType) {
return queryFactory return queryFactory
.select(modelHyperParamEntity) .select(modelHyperParamEntity)
.from(modelHyperParamEntity) .from(modelHyperParamEntity)
.where( .where(
modelHyperParamEntity modelHyperParamEntity
.delYn.isFalse() .delYn
.and(modelHyperParamEntity.modelType.eq(modelType))) .isFalse()
.fetch(); .and(modelHyperParamEntity.modelType.eq(modelType)))
.fetch();
} }
} }