diff --git a/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/controller/ResourceGroupController.java b/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/controller/ResourceGroupController.java index 1803fd41..ca3ed8dc 100644 --- a/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/controller/ResourceGroupController.java +++ b/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/controller/ResourceGroupController.java @@ -2,6 +2,7 @@ import DGU_AI_LAB.admin_be.domain.gpus.dto.response.GpuTypeResponseDTO; import DGU_AI_LAB.admin_be.domain.resourceGroups.controller.docs.ResourceGroupApi; +import DGU_AI_LAB.admin_be.domain.resourceGroups.dto.response.ResourceGroupResponseDTO; import DGU_AI_LAB.admin_be.domain.resourceGroups.service.ResourceGroupService; import DGU_AI_LAB.admin_be.global.common.SuccessResponse; import lombok.RequiredArgsConstructor; @@ -33,4 +34,17 @@ public ResponseEntity> getGpuTypeResources() { return SuccessResponse.ok(gpuTypes); } + /** + * 모든 리소스 그룹 정보 조회 API + * GET /api/resources/groups + * + * 리소스 그룹 ID, 설명, 서버명(LAB/FARM)을 반환합니다. + */ + @GetMapping("/groups") + public ResponseEntity> getAvailableResourceGroups() { + List resourceGroups = resourceGroupService.getAllResourceGroups(); + return SuccessResponse.ok(resourceGroups); + } + + } diff --git a/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/dto/response/ResourceGroupResponseDTO.java b/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/dto/response/ResourceGroupResponseDTO.java index c52a6062..e6df91b2 100644 --- a/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/dto/response/ResourceGroupResponseDTO.java +++ b/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/dto/response/ResourceGroupResponseDTO.java @@ -6,12 +6,14 @@ @Builder public record ResourceGroupResponseDTO( Integer rsgroupId, - String description + String description, + String serverName ) { public static ResourceGroupResponseDTO fromEntity(ResourceGroup resourceGroup) { return ResourceGroupResponseDTO.builder() .rsgroupId(resourceGroup.getRsgroupId()) .description(resourceGroup.getDescription()) + .serverName(resourceGroup.getServerName()) .build(); } -} \ No newline at end of file +} diff --git a/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/service/ResourceGroupService.java b/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/service/ResourceGroupService.java index 2d9283e1..a0ae9b96 100644 --- a/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/service/ResourceGroupService.java +++ b/src/main/java/DGU_AI_LAB/admin_be/domain/resourceGroups/service/ResourceGroupService.java @@ -2,6 +2,8 @@ import DGU_AI_LAB.admin_be.domain.gpus.dto.response.GpuTypeResponseDTO; import DGU_AI_LAB.admin_be.domain.gpus.repository.GpuRepository; +import DGU_AI_LAB.admin_be.domain.resourceGroups.dto.response.ResourceGroupResponseDTO; +import DGU_AI_LAB.admin_be.domain.resourceGroups.repository.ResourceGroupRepository; import DGU_AI_LAB.admin_be.error.ErrorCode; import DGU_AI_LAB.admin_be.error.exception.BusinessException; import lombok.RequiredArgsConstructor; @@ -19,6 +21,7 @@ public class ResourceGroupService { private final GpuRepository gpuRepository; + private final ResourceGroupRepository resourceGroupRepository; /** * GPU 기종별 리소스 정보 조회 @@ -49,4 +52,24 @@ public List getGpuTypeResources() { log.info("[getGpuTypeResources] GPU 기종별 리소스 정보 조회 완료. {}개 기종", response.size()); return response; } + + /** + * 모든 리소스 그룹 정보를 조회하는 API + * GET /api/resources/groups + */ + public List getAllResourceGroups() { + log.info("[getAllResourceGroups] 모든 리소스 그룹 정보 조회 시작"); + var resourceGroups = resourceGroupRepository.findAll(); + + if (resourceGroups.isEmpty()) { + log.warn("[getAllResourceGroups] 조회된 리소스 그룹이 없습니다."); + } + + var response = resourceGroups.stream() + .map(ResourceGroupResponseDTO::fromEntity) + .toList(); + + log.info("[getAllResourceGroups] 모든 리소스 그룹 정보 조회 완료. {}개 그룹", response.size()); + return response; + } }