From 865c43827320e5296df38fde451b396a72bddf39 Mon Sep 17 00:00:00 2001 From: nuyh Date: Thu, 17 Aug 2023 17:20:26 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20Fetch=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #1473 --- .../roadmap/application/RoadMapService.java | 50 +++++++++++-------- .../repository/EssayAnswerRepository.java | 1 - 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/backend/src/main/java/wooteco/prolog/roadmap/application/RoadMapService.java b/backend/src/main/java/wooteco/prolog/roadmap/application/RoadMapService.java index bfa7b5be8..7f96d0479 100644 --- a/backend/src/main/java/wooteco/prolog/roadmap/application/RoadMapService.java +++ b/backend/src/main/java/wooteco/prolog/roadmap/application/RoadMapService.java @@ -20,8 +20,10 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; +import static java.util.stream.Collectors.groupingBy; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toSet; import static wooteco.prolog.common.exception.BadRequestCode.CURRICULUM_NOT_FOUND_EXCEPTION; @RequiredArgsConstructor @@ -40,37 +42,43 @@ public KeywordsResponse findAllKeywordsWithProgress(final Long curriculumId, fin final Curriculum curriculum = curriculumRepository.findById(curriculumId) .orElseThrow(() -> new BadRequestException(CURRICULUM_NOT_FOUND_EXCEPTION)); - final Set sessionIds = sessionRepository.findAllByCurriculumId(curriculum.getId()) - .stream() - .map(Session::getId) - .collect(Collectors.toSet()); + final List keywordsInCurriculum = getKeywordsInCurriculum(curriculum); - final List keywords = keywordRepository.findBySessionIdIn(sessionIds); + final Map> quizzesInKeywords = quizRepository.findAll().stream() + .collect(groupingBy(Quiz::getKeyword, toSet())); + + return createResponsesWithProgress(keywordsInCurriculum, quizzesInKeywords, getDoneQuizzes(memberId)); + } - final Set doneQuizzes = essayAnswerRepository.findAllByMemberId(memberId).stream() + private Set getDoneQuizzes(final Long memberId) { + return essayAnswerRepository.findAllByMemberId(memberId).stream() .map(EssayAnswer::getQuiz) - .collect(Collectors.toSet()); + .collect(toSet()); + } - final Map> quizzesPerKeyword = quizRepository.findAll().stream() - .collect(Collectors.groupingBy(Quiz::getKeyword, Collectors.toSet())); + private List getKeywordsInCurriculum(final Curriculum curriculum) { + final Set sessionIds = sessionRepository.findAllByCurriculumId(curriculum.getId()) + .stream() + .map(Session::getId) + .collect(toSet()); - return createWithProgress(keywords, quizzesPerKeyword, doneQuizzes); + return keywordRepository.findBySessionIdIn(sessionIds); } - private KeywordsResponse createWithProgress(final List keywords, - final Map> quizzesPerKeyword, - final Set doneQuizzes) { + private KeywordsResponse createResponsesWithProgress(final List keywords, + final Map> quizzesPerKeyword, + final Set doneQuizzes) { final List keywordResponses = keywords.stream() .filter(Keyword::isRoot) - .map(keyword -> createWithProgress(keyword, quizzesPerKeyword, doneQuizzes)) - .collect(Collectors.toList()); + .map(keyword -> createResponseWithProgress(keyword, quizzesPerKeyword, doneQuizzes)) + .collect(toList()); return new KeywordsResponse(keywordResponses); } - private KeywordResponse createWithProgress(final Keyword keyword, - final Map> quizzesPerKeyword, - final Set doneQuizzes) { + private KeywordResponse createResponseWithProgress(final Keyword keyword, + final Map> quizzesPerKeyword, + final Set doneQuizzes) { final int totalQuizCount = quizzesPerKeyword.get(keyword).size(); final Set quizzes = quizzesPerKeyword.get(keyword); quizzes.retainAll(doneQuizzes); @@ -93,7 +101,7 @@ private Set createChildrenWithProgress(final Set child final Map> quizzesPerKeyword, final Set userAnswers) { return children.stream() - .map(child -> createWithProgress(child, quizzesPerKeyword, userAnswers)) - .collect(Collectors.toSet()); + .map(child -> createResponseWithProgress(child, quizzesPerKeyword, userAnswers)) + .collect(toSet()); } } diff --git a/backend/src/main/java/wooteco/prolog/roadmap/domain/repository/EssayAnswerRepository.java b/backend/src/main/java/wooteco/prolog/roadmap/domain/repository/EssayAnswerRepository.java index 4a0156606..3e2a962f6 100644 --- a/backend/src/main/java/wooteco/prolog/roadmap/domain/repository/EssayAnswerRepository.java +++ b/backend/src/main/java/wooteco/prolog/roadmap/domain/repository/EssayAnswerRepository.java @@ -19,7 +19,6 @@ public interface EssayAnswerRepository extends JpaRepository, @Query("SELECT e FROM EssayAnswer e " + "LEFT JOIN FETCH e.quiz q " + - "LEFT JOIN FETCH q.keyword " + "WHERE e.member.id = :memberId") Set findAllByMemberId(@Param("memberId") Long memberId); }