Skip to content

Commit 50a1b7e

Browse files
authored
Merge pull request #166 from capgoing/fix/#165
🐛 [fix] questionTargetId가 배열 인덱스가 아닌 실제 노드 ID를 반환하도록 수정
2 parents e727ef7 + c9db466 commit 50a1b7e

File tree

2 files changed

+15
-22
lines changed

2 files changed

+15
-22
lines changed

src/main/java/com/going/server/domain/graph/repository/GraphNodeRepository.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,4 @@ OR toLower(n.label) CONTAINS toLower($keyword)
2525
RETURN n
2626
""")
2727
List<GraphNode> findByKeyword(String keyword);
28-
29-
3028
}

src/main/java/com/going/server/domain/quiz/generate/ConnectQuizGenerator.java

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public ConnectQuizDto generate(Graph graph) {
3838
// 최종 문제 리스트
3939
List<ConnectQuizDto.ConnectQuiz> quizList = new ArrayList<>();
4040
// 이미 사용한 노드 Id 기록용 (중복 방지)
41-
Set<Integer> usedNodeIds = new HashSet<>();
41+
Set<String> usedNodeIds = new HashSet<>();
4242

4343
// 문제 3개 만들기
4444
for (int i = 0; i < 3; i++) {
@@ -53,47 +53,42 @@ public ConnectQuizDto generate(Graph graph) {
5353
}
5454

5555
// connect 퀴즈 문제 생성
56-
private static void createConnectQuiz(Random random, List<NodeDto> nodeDtoList, List<ConnectQuizDto.ConnectQuiz> quizList, Set<Integer> usedNodeIndices) {
57-
if(usedNodeIndices.size() >= nodeDtoList.size()) {
58-
// 모든 노드를 다 사용했으면 추가 생성 불가
59-
return;
60-
}
56+
private static void createConnectQuiz(Random random, List<NodeDto> nodeDtoList,
57+
List<ConnectQuizDto.ConnectQuiz> quizList, Set<String> usedNodeIds) {
58+
if (usedNodeIds.size() >= nodeDtoList.size()) return;
6159

62-
int questionTargetId;
60+
NodeDto targetNode;
61+
String targetId;
6362

64-
// nodeDtoList 중 1개의 id로 랜덤 선택 (중복 방지)
63+
// node의 ID(String) 기준 중복 체크
6564
do {
66-
questionTargetId = random.nextInt(nodeDtoList.size());
67-
} while (usedNodeIndices.contains(questionTargetId));
65+
int randomIndex = random.nextInt(nodeDtoList.size());
66+
targetNode = nodeDtoList.get(randomIndex);
67+
targetId = String.valueOf(targetNode.getId());
68+
} while (usedNodeIds.contains(targetId));
6869

69-
NodeDto targetNode = nodeDtoList.get(questionTargetId);
70-
usedNodeIndices.add(questionTargetId); // 사용한 Id 추가
70+
usedNodeIds.add(targetId); // 사용된 ID 등록
7171

72-
// 정답
7372
String answer = targetNode.getLabel();
7473

75-
// 정답 포함 5개 보기 생성
7674
Set<String> options = new HashSet<>();
77-
options.add(answer); // 정답 보기 추가
75+
options.add(answer);
7876

79-
while (options.size() < 5) { // 랜덤 보기 추가
77+
while (options.size() < 5) {
8078
int randomIndex = random.nextInt(nodeDtoList.size());
8179
String option = nodeDtoList.get(randomIndex).getLabel();
8280
options.add(option);
8381
}
8482

85-
// 보기 리스트 랜덤 배치
8683
List<String> shuffledOptions = new ArrayList<>(options);
8784
Collections.shuffle(shuffledOptions);
8885

89-
// 문제 하나 생성
9086
ConnectQuizDto.ConnectQuiz quiz = ConnectQuizDto.ConnectQuiz.builder()
91-
.questionTargetId(String.valueOf(questionTargetId))
87+
.questionTargetId(targetId) // ID는 이제 문자열
9288
.shuffledOptions(shuffledOptions)
9389
.answer(answer)
9490
.build();
9591

96-
// 문제 리스트에 추가
9792
quizList.add(quiz);
9893
}
9994
}

0 commit comments

Comments
 (0)