Skip to content

Commit

Permalink
Merge pull request #110 from Kid-Bean/refactor/lhj/word-quiz
Browse files Browse the repository at this point in the history
refactor: WordQuiz N+1 문제 해결
  • Loading branch information
Amepistheo authored Feb 6, 2025
2 parents 12a2dc0 + 21be784 commit 7f4f517
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,24 @@

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import soongsil.kidbean.server.global.util.RandNumUtil;
import soongsil.kidbean.server.member.domain.Member;
import soongsil.kidbean.server.member.exception.MemberNotFoundException;
import soongsil.kidbean.server.member.repository.MemberRepository;
import soongsil.kidbean.server.quizsolve.application.QuizSolvedService;
import soongsil.kidbean.server.quizsolve.dto.request.QuizSolvedRequest;
import soongsil.kidbean.server.wordquiz.domain.Word;
import soongsil.kidbean.server.wordquiz.domain.WordQuiz;
import soongsil.kidbean.server.quizsolve.dto.request.QuizSolvedRequest;
import soongsil.kidbean.server.wordquiz.dto.request.WordQuizUpdateRequest;
import soongsil.kidbean.server.wordquiz.dto.request.WordQuizUploadRequest;
import soongsil.kidbean.server.wordquiz.dto.response.WordQuizMemberDetailResponse;
import soongsil.kidbean.server.wordquiz.dto.response.WordQuizMemberResponse;
import soongsil.kidbean.server.wordquiz.dto.response.WordQuizSolveListResponse;
import soongsil.kidbean.server.wordquiz.dto.response.WordQuizSolveResponse;
import soongsil.kidbean.server.wordquiz.dto.response.WordQuizSolveScoreResponse;
import soongsil.kidbean.server.wordquiz.dto.response.*;
import soongsil.kidbean.server.wordquiz.exception.WordQuizNotFoundException;
import soongsil.kidbean.server.wordquiz.repository.WordQuizRepository;
import soongsil.kidbean.server.wordquiz.repository.WordRepository;

import java.util.List;
import soongsil.kidbean.server.global.util.RandNumUtil;

import static soongsil.kidbean.server.member.exception.errorcode.MemberErrorCode.MEMBER_NOT_FOUND;
import static soongsil.kidbean.server.quizsolve.application.vo.QuizType.WORD_QUIZ;
Expand Down Expand Up @@ -69,7 +64,7 @@ private int getWordQuizCount(Member member) {
}

private WordQuiz generateRandomWordQuizPage(Member member, int quizIdx) {
return wordQuizRepository.findSingleResultByMember(member, PageRequest.of(quizIdx, 1)).get(0);
return wordQuizRepository.findSingleResultByMember(member, (long) quizIdx).get(0);
}

@Transactional
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package soongsil.kidbean.server.wordquiz.repository;

import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
Expand All @@ -16,8 +15,8 @@ public interface WordQuizRepository extends JpaRepository<WordQuiz, Long> {
@Query("SELECT count(*) FROM WordQuiz wq WHERE wq.member = :member OR wq.member.role = 'ADMIN'")
Integer countByMemberOrAdmin(Member member);

@Query("SELECT wq FROM WordQuiz wq WHERE wq.member = :member OR wq.member.role = 'ADMIN'")
List<WordQuiz> findSingleResultByMember(Member member, Pageable pageable);
@Query("SELECT wq FROM WordQuiz wq JOIN FETCH wq.words WHERE wq.quizId = :quizId AND wq.member = :member OR wq.member.role = 'ADMIN'")
List<WordQuiz> findSingleResultByMember(Member member, Long quizId);

Optional<WordQuiz> findByQuizIdAndMember_MemberId(Long quizId, Long memberId);

Expand Down

0 comments on commit 7f4f517

Please sign in to comment.