diff --git a/backend/src/main/java/io/f1/backend/domain/game/dto/request/QuizChangeRequest.java b/backend/src/main/java/io/f1/backend/domain/game/dto/request/QuizChangeRequest.java index 3ec2f497..ecafe393 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/dto/request/QuizChangeRequest.java +++ b/backend/src/main/java/io/f1/backend/domain/game/dto/request/QuizChangeRequest.java @@ -8,7 +8,6 @@ import io.f1.backend.domain.game.model.Room; import io.f1.backend.domain.game.websocket.MessageSender; import io.f1.backend.domain.quiz.app.QuizService; -import io.f1.backend.domain.quiz.entity.Quiz; import lombok.extern.slf4j.Slf4j; @@ -20,11 +19,8 @@ public boolean change(Room room, QuizService quizService) { if (room.getQuizId() == quizId) { return false; // 동일하면 무시 } - Quiz quiz = quizService.getQuizWithQuestionsById(quizId); - int questionSize = quiz.getQuestions().size(); - room.changeQuiz(quiz); - // 퀴즈의 문제 갯수로 변경 - room.changeRound(questionSize, questionSize); + Long questionsCount = quizService.getQuestionsCount(quizId); + room.changeQuiz(quizId, questionsCount.intValue()); return true; } diff --git a/backend/src/main/java/io/f1/backend/domain/game/dto/request/RoundChangeRequest.java b/backend/src/main/java/io/f1/backend/domain/game/dto/request/RoundChangeRequest.java index a3ad914e..b44cb72a 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/dto/request/RoundChangeRequest.java +++ b/backend/src/main/java/io/f1/backend/domain/game/dto/request/RoundChangeRequest.java @@ -3,7 +3,6 @@ import io.f1.backend.domain.game.model.Room; import io.f1.backend.domain.game.websocket.MessageSender; import io.f1.backend.domain.quiz.app.QuizService; -import io.f1.backend.domain.quiz.entity.Quiz; public record RoundChangeRequest(int round) implements GameSettingChanger { @@ -13,10 +12,9 @@ public boolean change(Room room, QuizService quizService) { return false; // 동일하면 무시 } - Quiz quiz = quizService.findQuizById(room.getQuizId()); - int questionSize = quiz.getQuestions().size(); + Long questionsCount = quizService.getQuestionsCount(room.getQuizId()); - room.changeRound(round, questionSize); + room.changeRound(round, questionsCount.intValue()); return true; } diff --git a/backend/src/main/java/io/f1/backend/domain/game/model/GameSetting.java b/backend/src/main/java/io/f1/backend/domain/game/model/GameSetting.java index 9c38bd68..3c644453 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/model/GameSetting.java +++ b/backend/src/main/java/io/f1/backend/domain/game/model/GameSetting.java @@ -1,7 +1,6 @@ package io.f1.backend.domain.game.model; import io.f1.backend.domain.game.dto.request.TimeLimit; -import io.f1.backend.domain.quiz.entity.Quiz; import io.f1.backend.global.exception.CustomException; import io.f1.backend.global.exception.errorcode.GameErrorCode; @@ -16,9 +15,9 @@ public class GameSetting { private Integer round; private int timeLimit; - public void changeQuiz(Quiz quiz) { - quizId = quiz.getId(); - round = quiz.getQuestions().size(); // 라운드를 바꾼 퀴즈의 문제 수로 동기화 + public void changeQuiz(Long quizId, int questionsCount) { + this.quizId = quizId; + round = questionsCount; // 라운드를 바꾼 퀴즈의 문제 수로 동기화 } public void changeTimeLimit(TimeLimit timeLimit) { diff --git a/backend/src/main/java/io/f1/backend/domain/game/model/Room.java b/backend/src/main/java/io/f1/backend/domain/game/model/Room.java index 7580594c..72819dd4 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/model/Room.java +++ b/backend/src/main/java/io/f1/backend/domain/game/model/Room.java @@ -2,7 +2,6 @@ import io.f1.backend.domain.game.dto.request.TimeLimit; import io.f1.backend.domain.question.entity.Question; -import io.f1.backend.domain.quiz.entity.Quiz; import io.f1.backend.global.exception.CustomException; import io.f1.backend.global.exception.errorcode.RoomErrorCode; @@ -161,8 +160,8 @@ public void resetAllPlayerReadyStates() { } } - public void changeQuiz(Quiz quiz) { - gameSetting.changeQuiz(quiz); + public void changeQuiz(Long quizId, int questionsCount) { + gameSetting.changeQuiz(quizId, questionsCount); } public void changeTimeLimit(TimeLimit timeLimit) { diff --git a/backend/src/main/java/io/f1/backend/domain/quiz/app/QuizService.java b/backend/src/main/java/io/f1/backend/domain/quiz/app/QuizService.java index c16365d3..bc85f2af 100644 --- a/backend/src/main/java/io/f1/backend/domain/quiz/app/QuizService.java +++ b/backend/src/main/java/io/f1/backend/domain/quiz/app/QuizService.java @@ -284,4 +284,9 @@ public Quiz findQuizById(Long quizId) { .findById(quizId) .orElseThrow(() -> new CustomException(QuizErrorCode.QUIZ_NOT_FOUND)); } + + @Transactional(readOnly = true) + public Long getQuestionsCount(Long quizId) { + return quizRepository.countQuestionsByQuizId(quizId); + } } diff --git a/backend/src/main/java/io/f1/backend/domain/quiz/dao/QuizRepository.java b/backend/src/main/java/io/f1/backend/domain/quiz/dao/QuizRepository.java index 5c205705..636dac7f 100644 --- a/backend/src/main/java/io/f1/backend/domain/quiz/dao/QuizRepository.java +++ b/backend/src/main/java/io/f1/backend/domain/quiz/dao/QuizRepository.java @@ -21,6 +21,9 @@ public interface QuizRepository extends JpaRepository { @Query("SELECT q FROM Quiz q LEFT JOIN FETCH q.questions WHERE q.id = :quizId") Optional findQuizWithQuestionsById(Long quizId); + @Query("SELECT COUNT(qst) FROM Quiz q JOIN q.questions qst WHERE q.id = :quizId") + Long countQuestionsByQuizId(Long quizId); + @Query( """ SELECT new io.f1.backend.domain.quiz.dto.QuizMinData (q.id, COUNT(qs.id))