From 18ac23b801f0444918815df1fa9afd3461e205ca Mon Sep 17 00:00:00 2001 From: yunhacandy Date: Fri, 16 Aug 2024 15:03:06 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20ProjectSummaryResponse=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Stream 내부의 복잡한 로직을 별도 메서드로 분리하여 가독성 향상 -generationId와 generationNumber 조회 최적화 - Project 엔티티의 generationId를 활용하여 추가적인 DB 조회 최소화 --- .../generation/service/ProjectService.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java index 097970b1..27fbd974 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java @@ -2,7 +2,9 @@ import jakarta.persistence.EntityNotFoundException; import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.cotato.csquiz.api.project.dto.ProjectDetailResponse; import org.cotato.csquiz.api.project.dto.ProjectSummaryResponse; @@ -45,11 +47,25 @@ public List getAllProjectSummaries(){ List projects = projectRepository.findAll(); - return projects.stream().map(project -> { - Optional logoImage = projectImageRepository.findByProjectIdAndProjectImageType(project.getId(), ProjectImageType.LOGO); - Integer generationNumber = generationRepository.findGenerationNumberByGenerationId(project.getGenerationId()); + Map generationNumberMap = projects.stream() + .map(Project::getGenerationId) + .distinct() + .collect(Collectors.toMap( + generationId -> generationId, + generationRepository::findGenerationNumberByGenerationId + )); - return ProjectSummaryResponse.of(project, generationNumber, logoImage.orElse(null)); - }).toList(); + return projects.stream() + .map(project -> toProjectSummaryResponse(project, generationNumberMap)) + .toList(); + } + + private ProjectSummaryResponse toProjectSummaryResponse(Project project, Map generationMap) { + Optional logoImage = projectImageRepository.findByProjectIdAndProjectImageType( + project.getId(), ProjectImageType.LOGO + ); + Integer generationNumber = generationMap.get(project.getGenerationId()); + + return ProjectSummaryResponse.of(project, generationNumber, logoImage.orElse(null)); } }