From c7443ea3be6b546a461a952fd8ae8f8240a85472 Mon Sep 17 00:00:00 2001 From: yoon6yo Date: Sun, 12 Jul 2026 02:30:28 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20DTO=20=EB=B3=80=ED=99=98=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0=20?= =?UTF-8?q?(#336)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SaveRequestResponseDTO.fromEntity(): fromEntityWithPorts(request, List.of(), List.of()) 위임으로 40줄 중복 빌더 블록 제거 - AdminRequestQueryService.buildResponseDTOs(): RequestQueryService.toResponseDTOs() 위임으로 portRequestRepository/podExternalPortRepository 필드 및 동일 로직 제거 --- .../dto/response/SaveRequestResponseDTO.java | 40 +---------------- .../service/AdminRequestQueryService.java | 44 ++----------------- .../requests/service/RequestQueryService.java | 2 +- 3 files changed, 5 insertions(+), 81 deletions(-) diff --git a/src/main/java/DGU_AI_LAB/admin_be/domain/requests/dto/response/SaveRequestResponseDTO.java b/src/main/java/DGU_AI_LAB/admin_be/domain/requests/dto/response/SaveRequestResponseDTO.java index 39fe8db5..a72c0682 100644 --- a/src/main/java/DGU_AI_LAB/admin_be/domain/requests/dto/response/SaveRequestResponseDTO.java +++ b/src/main/java/DGU_AI_LAB/admin_be/domain/requests/dto/response/SaveRequestResponseDTO.java @@ -117,45 +117,7 @@ public static AdminUserInfo fromEntity(User user) { } public static SaveRequestResponseDTO fromEntity(Request request) { - - if (request.getResourceGroup() == null) { - throw new BusinessException(ErrorCode.RESOURCE_GROUP_NOT_FOUND); - } - if (request.getUser() == null) { - throw new BusinessException(ErrorCode.USER_NOT_FOUND); - } - if (request.getContainerImage() == null) { - throw new BusinessException(ErrorCode.RESOURCE_NOT_FOUND); - } - - return SaveRequestResponseDTO.builder() - .requestId(request.getRequestId()) - .resourceGroupId(request.getResourceGroup().getRsgroupId()) - .resourceGroup(AdminResourceGroupInfo.fromEntity(request.getResourceGroup())) - .user(AdminUserInfo.fromEntity(request.getUser())) - .imageId(request.getContainerImage().getImageId()) - .imageName(request.getContainerImage().getImageName()) - .imageVersion(request.getContainerImage().getImageVersion()) - .ubuntuUsername(request.getUbuntuUsername()) - .ubuntuUid(request.getUbuntuUid()) - .ubuntuGid(request.getUbuntuGid()) - .ubuntuGids( - request.getRequestGroups().stream() - .map(rg -> rg.getGroup().getUbuntuGid()) - .toList() - ) - .volumeSizeGiB(request.getVolumeSizeGiB()) - .usagePurpose(request.getUsagePurpose()) - .formAnswers(request.getFormAnswers()) - .expiresAt(request.getExpiresAt()) - .status(request.getStatus()) - .approvedAt(request.getApprovedAt()) - .comment(request.getAdminComment()) - .portMappings(List.of()) - .podExternalPorts(List.of()) - .createdAt(request.getCreatedAt()) - .updatedAt(request.getUpdatedAt()) - .build(); + return fromEntityWithPorts(request, List.of(), List.of()); } public static SaveRequestResponseDTO fromEntityWithPortMappings(Request request, List portMappings) { diff --git a/src/main/java/DGU_AI_LAB/admin_be/domain/requests/service/AdminRequestQueryService.java b/src/main/java/DGU_AI_LAB/admin_be/domain/requests/service/AdminRequestQueryService.java index 1533e4a9..af980aa7 100644 --- a/src/main/java/DGU_AI_LAB/admin_be/domain/requests/service/AdminRequestQueryService.java +++ b/src/main/java/DGU_AI_LAB/admin_be/domain/requests/service/AdminRequestQueryService.java @@ -1,15 +1,9 @@ package DGU_AI_LAB.admin_be.domain.requests.service; -import DGU_AI_LAB.admin_be.domain.pod.repository.PodExternalPortRepository; -import DGU_AI_LAB.admin_be.domain.portRequests.entity.PortRequests; -import DGU_AI_LAB.admin_be.domain.portRequests.repository.PortRequestRepository; import DGU_AI_LAB.admin_be.domain.requests.dto.response.ChangeRequestResponseDTO; import DGU_AI_LAB.admin_be.domain.requests.dto.response.ContainerInfoDTO; -import DGU_AI_LAB.admin_be.domain.requests.dto.response.PodExternalPortResponseDTO; -import DGU_AI_LAB.admin_be.domain.requests.dto.response.PortMappingDTO; import DGU_AI_LAB.admin_be.domain.requests.dto.response.ResourceUsageDTO; import DGU_AI_LAB.admin_be.domain.requests.dto.response.SaveRequestResponseDTO; -import DGU_AI_LAB.admin_be.domain.pod.entity.PodExternalPort; import DGU_AI_LAB.admin_be.domain.requests.entity.Request; import DGU_AI_LAB.admin_be.domain.requests.entity.Status; import DGU_AI_LAB.admin_be.domain.requests.repository.ChangeRequestRepository; @@ -19,7 +13,6 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; @Service @@ -29,47 +22,16 @@ public class AdminRequestQueryService { private final RequestRepository requestRepository; private final ChangeRequestRepository changeRequestRepository; - private final PortRequestRepository portRequestRepository; - private final PodExternalPortRepository podExternalPortRepository; + private final RequestQueryService requestQueryService; public List getAllRequests() { List requests = requestRepository.findAll(); - return buildResponseDTOs(requests); + return requestQueryService.toResponseDTOs(requests); } public List getNewRequests() { List requests = requestRepository.findAllByStatus(Status.PENDING); - return buildResponseDTOs(requests); - } - - private List buildResponseDTOs(List requests) { - if (requests.isEmpty()) return List.of(); - - List requestIds = requests.stream().map(Request::getRequestId).toList(); - - Map> portMappingsByRequestId = portRequestRepository - .findByRequestRequestIdIn(requestIds) - .stream() - .collect(Collectors.groupingBy( - pr -> pr.getRequest().getRequestId(), - Collectors.mapping(PortMappingDTO::fromEntity, Collectors.toList()) - )); - - Map> podPortsByRequestId = podExternalPortRepository - .findByRequestRequestIdIn(requestIds) - .stream() - .collect(Collectors.groupingBy( - pp -> pp.getRequest().getRequestId(), - Collectors.mapping(PodExternalPortResponseDTO::fromEntity, Collectors.toList()) - )); - - return requests.stream() - .map(request -> SaveRequestResponseDTO.fromEntityWithPorts( - request, - portMappingsByRequestId.getOrDefault(request.getRequestId(), List.of()), - podPortsByRequestId.getOrDefault(request.getRequestId(), List.of()) - )) - .toList(); + return requestQueryService.toResponseDTOs(requests); } public List getAllFulfilledResourceUsage() { diff --git a/src/main/java/DGU_AI_LAB/admin_be/domain/requests/service/RequestQueryService.java b/src/main/java/DGU_AI_LAB/admin_be/domain/requests/service/RequestQueryService.java index 0ee3d4ee..f1f44c3d 100644 --- a/src/main/java/DGU_AI_LAB/admin_be/domain/requests/service/RequestQueryService.java +++ b/src/main/java/DGU_AI_LAB/admin_be/domain/requests/service/RequestQueryService.java @@ -45,7 +45,7 @@ public List getRequestsByUserId(Long userId) { } /** 목록 단위 배치 로딩으로 N+1 방지: portRequests, podExternalPorts를 IN절 1회씩 조회 */ - private List toResponseDTOs(List requests) { + List toResponseDTOs(List requests) { if (requests.isEmpty()) return List.of(); List ids = requests.stream().map(Request::getRequestId).toList();