Skip to content

Commit

Permalink
refactor: ProjectSummaryResponse 생성 로직 리팩토링
Browse files Browse the repository at this point in the history
- Stream 내부의 복잡한 로직을 별도 메서드로 분리하여 가독성 향상
-generationId와 generationNumber 조회 최적화
- Project 엔티티의 generationId를 활용하여 추가적인 DB 조회 최소화
  • Loading branch information
yunhacandy committed Aug 16, 2024
1 parent e5c4289 commit 18ac23b
Showing 1 changed file with 21 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -45,11 +47,25 @@ public List<ProjectSummaryResponse> getAllProjectSummaries(){

List<Project> projects = projectRepository.findAll();

return projects.stream().map(project -> {
Optional<ProjectImage> logoImage = projectImageRepository.findByProjectIdAndProjectImageType(project.getId(), ProjectImageType.LOGO);
Integer generationNumber = generationRepository.findGenerationNumberByGenerationId(project.getGenerationId());
Map<Long, Integer> 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<Long, Integer> generationMap) {
Optional<ProjectImage> logoImage = projectImageRepository.findByProjectIdAndProjectImageType(
project.getId(), ProjectImageType.LOGO
);
Integer generationNumber = generationMap.get(project.getGenerationId());

return ProjectSummaryResponse.of(project, generationNumber, logoImage.orElse(null));
}
}

0 comments on commit 18ac23b

Please sign in to comment.