From 693e3ef3ab7cadd042581c0f6bc8020979f9df04 Mon Sep 17 00:00:00 2001 From: teddy Date: Thu, 5 Feb 2026 14:22:37 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EB=AA=A8=EB=8D=B8=ED=95=99=EC=8A=B5=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=EC=85=8B=20=EC=84=A0=ED=83=9D=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kamco/cd/training/model/ModelTrainMngApiController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/kamco/cd/training/model/ModelTrainMngApiController.java b/src/main/java/com/kamco/cd/training/model/ModelTrainMngApiController.java index f95036f..b84f9fe 100644 --- a/src/main/java/com/kamco/cd/training/model/ModelTrainMngApiController.java +++ b/src/main/java/com/kamco/cd/training/model/ModelTrainMngApiController.java @@ -114,7 +114,7 @@ public class ModelTrainMngApiController { return ApiResponseDto.ok(modelTrainMngService.getModelConfigByModelId(uuid)); } - @Operation(summary = "학습데이터관리 상세 조회", description = "학습데이터관리 상세 정보를 조회합니다.") + @Operation(summary = "모델별 데이터셋 목록 조회", description = "모델별 데이터셋 목록 조회 API") @ApiResponses( value = { @ApiResponse( From 29b653a4e9ac097333c178d1eaa6146d22bdf5c8 Mon Sep 17 00:00:00 2001 From: teddy Date: Thu, 5 Feb 2026 15:08:22 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=EC=85=8B=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=EC=A1=B0=ED=9A=8C=20class=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataset/DatasetApiController.java | 24 +++++++++++++++++++ .../training/dataset/dto/DatasetObjDto.java | 13 ++++++++++ .../dataset/service/DatasetService.java | 12 ++++++++++ .../postgres/core/DatasetCoreService.java | 13 ++++++++++ .../dataset/DatasetObjRepositoryCustom.java | 4 ++++ .../dataset/DatasetObjRepositoryImpl.java | 24 +++++++++++++++++++ 6 files changed, 90 insertions(+) diff --git a/src/main/java/com/kamco/cd/training/dataset/DatasetApiController.java b/src/main/java/com/kamco/cd/training/dataset/DatasetApiController.java index 42bb2ef..ec0fd07 100644 --- a/src/main/java/com/kamco/cd/training/dataset/DatasetApiController.java +++ b/src/main/java/com/kamco/cd/training/dataset/DatasetApiController.java @@ -3,6 +3,7 @@ package com.kamco.cd.training.dataset; import com.kamco.cd.training.config.api.ApiResponseDto; import com.kamco.cd.training.dataset.dto.DatasetDto; import com.kamco.cd.training.dataset.dto.DatasetObjDto; +import com.kamco.cd.training.dataset.dto.DatasetObjDto.DatasetClass; import com.kamco.cd.training.dataset.service.DatasetService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -12,6 +13,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -192,4 +194,26 @@ public class DatasetApiController { public ApiResponseDto deleteDatasetObjByUuid(@PathVariable UUID uuid) { return ApiResponseDto.ok(datasetService.deleteDatasetObjByUuid(uuid)); } + + @Operation(summary = "학습데이터 결과 class 조회", description = "학습데이터 결과 class 조회 API") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = Page.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/class/{uuid}") + public ApiResponseDto> getDatasetObjByUuid( + @Parameter(description = "dataset uuid", example = "e1416f32-769f-495c-a883-3ebfacef4bac") + @PathVariable + UUID uuid, + @Parameter(description = "compare, target", example = "compare") @RequestParam String type) { + return ApiResponseDto.ok(datasetService.getDatasetObjByUuid(uuid, type)); + } } diff --git a/src/main/java/com/kamco/cd/training/dataset/dto/DatasetObjDto.java b/src/main/java/com/kamco/cd/training/dataset/dto/DatasetObjDto.java index 0e56457..54c392a 100644 --- a/src/main/java/com/kamco/cd/training/dataset/dto/DatasetObjDto.java +++ b/src/main/java/com/kamco/cd/training/dataset/dto/DatasetObjDto.java @@ -1,5 +1,6 @@ package com.kamco.cd.training.dataset.dto; +import com.kamco.cd.training.common.enums.DetectionClassification; import com.kamco.cd.training.common.utils.interfaces.JsonFormatDttm; import io.swagger.v3.oas.annotations.media.Schema; import java.time.ZonedDateTime; @@ -108,4 +109,16 @@ public class DatasetObjDto { return PageRequest.of(pageIndex, size, Sort.by(Sort.Direction.DESC, "createdDttm")); } } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class DatasetClass { + private String classCd; + + public String getClassName() { + return DetectionClassification.valueOf(classCd.toUpperCase()).getDesc(); + } + } } diff --git a/src/main/java/com/kamco/cd/training/dataset/service/DatasetService.java b/src/main/java/com/kamco/cd/training/dataset/service/DatasetService.java index 217fcf5..0971f7b 100644 --- a/src/main/java/com/kamco/cd/training/dataset/service/DatasetService.java +++ b/src/main/java/com/kamco/cd/training/dataset/service/DatasetService.java @@ -2,8 +2,10 @@ package com.kamco.cd.training.dataset.service; import com.kamco.cd.training.dataset.dto.DatasetDto; import com.kamco.cd.training.dataset.dto.DatasetObjDto; +import com.kamco.cd.training.dataset.dto.DatasetObjDto.DatasetClass; import com.kamco.cd.training.dataset.dto.DatasetObjDto.SearchReq; import com.kamco.cd.training.postgres.core.DatasetCoreService; +import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -93,4 +95,14 @@ public class DatasetService { public UUID deleteDatasetObjByUuid(UUID uuid) { return datasetCoreService.deleteDatasetObjByUuid(uuid); } + + /** + * 데이터셋 object class 조회 + * + * @param uuid dataset uuid + * @param type compare, target + */ + public List getDatasetObjByUuid(UUID uuid, String type) { + return datasetCoreService.findDatasetObjClassByUuid(uuid, type); + } } diff --git a/src/main/java/com/kamco/cd/training/postgres/core/DatasetCoreService.java b/src/main/java/com/kamco/cd/training/postgres/core/DatasetCoreService.java index c3a2c88..8d407d5 100644 --- a/src/main/java/com/kamco/cd/training/postgres/core/DatasetCoreService.java +++ b/src/main/java/com/kamco/cd/training/postgres/core/DatasetCoreService.java @@ -7,12 +7,14 @@ import com.kamco.cd.training.common.exception.NotFoundException; import com.kamco.cd.training.common.service.BaseCoreService; import com.kamco.cd.training.dataset.dto.DatasetDto; import com.kamco.cd.training.dataset.dto.DatasetObjDto.Basic; +import com.kamco.cd.training.dataset.dto.DatasetObjDto.DatasetClass; import com.kamco.cd.training.dataset.dto.DatasetObjDto.SearchReq; import com.kamco.cd.training.postgres.entity.DatasetEntity; import com.kamco.cd.training.postgres.entity.DatasetObjEntity; import com.kamco.cd.training.postgres.repository.dataset.DatasetObjRepository; import com.kamco.cd.training.postgres.repository.dataset.DatasetRepository; import java.time.ZonedDateTime; +import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -195,4 +197,15 @@ public class DatasetCoreService datasetObjRepository.save(entity); return entity.getUuid(); } + + /** + * 데이터셋 object class 조회 + * + * @param uuid dataset uuid + * @param type compare, target + * @return + */ + public List findDatasetObjClassByUuid(UUID uuid, String type) { + return datasetObjRepository.findDatasetObjClassByUuid(uuid, type); + } } diff --git a/src/main/java/com/kamco/cd/training/postgres/repository/dataset/DatasetObjRepositoryCustom.java b/src/main/java/com/kamco/cd/training/postgres/repository/dataset/DatasetObjRepositoryCustom.java index 6ba4674..dc24bdf 100644 --- a/src/main/java/com/kamco/cd/training/postgres/repository/dataset/DatasetObjRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/training/postgres/repository/dataset/DatasetObjRepositoryCustom.java @@ -1,7 +1,9 @@ package com.kamco.cd.training.postgres.repository.dataset; +import com.kamco.cd.training.dataset.dto.DatasetObjDto.DatasetClass; import com.kamco.cd.training.dataset.dto.DatasetObjDto.SearchReq; import com.kamco.cd.training.postgres.entity.DatasetObjEntity; +import java.util.List; import java.util.Optional; import java.util.UUID; import org.springframework.data.domain.Page; @@ -11,4 +13,6 @@ public interface DatasetObjRepositoryCustom { Optional findByUuid(UUID id); Page searchDatasetObjectList(SearchReq searchReq); + + List findDatasetObjClassByUuid(UUID uuid, String type); } diff --git a/src/main/java/com/kamco/cd/training/postgres/repository/dataset/DatasetObjRepositoryImpl.java b/src/main/java/com/kamco/cd/training/postgres/repository/dataset/DatasetObjRepositoryImpl.java index a3402d0..0d9145d 100644 --- a/src/main/java/com/kamco/cd/training/postgres/repository/dataset/DatasetObjRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/training/postgres/repository/dataset/DatasetObjRepositoryImpl.java @@ -3,11 +3,14 @@ package com.kamco.cd.training.postgres.repository.dataset; import static com.kamco.cd.training.postgres.entity.QDatasetEntity.datasetEntity; import static com.kamco.cd.training.postgres.entity.QDatasetObjEntity.datasetObjEntity; +import com.kamco.cd.training.dataset.dto.DatasetObjDto.DatasetClass; import com.kamco.cd.training.dataset.dto.DatasetObjDto.SearchReq; import com.kamco.cd.training.postgres.entity.DatasetEntity; import com.kamco.cd.training.postgres.entity.DatasetObjEntity; import com.kamco.cd.training.postgres.entity.QDatasetEntity; import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.StringPath; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityNotFoundException; import java.util.List; @@ -94,4 +97,25 @@ public class DatasetObjRepositoryImpl implements DatasetObjRepositoryCustom { return new PageImpl<>(content, pageable, total); } + + @Override + public List findDatasetObjClassByUuid(UUID uuid, String type) { + + StringPath classCd = + type.equals("compare") ? datasetObjEntity.compareClassCd : datasetObjEntity.targetClassCd; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(datasetEntity.uuid.eq(uuid)); + builder.and(datasetEntity.deleted.isFalse()); + builder.and(datasetObjEntity.deleted.isFalse()); + + return queryFactory + .select(Projections.constructor(DatasetClass.class, classCd)) + .from(datasetEntity) + .join(datasetObjEntity) + .on(datasetEntity.id.eq(datasetObjEntity.datasetUid)) + .where(builder) + .groupBy(classCd) + .fetch(); + } }