Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,4 @@ OR toLower(n.label) CONTAINS toLower($keyword)
RETURN n
""")
List<GraphNode> findByKeyword(String keyword);


}
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public ConnectQuizDto generate(Graph graph) {
// ์ตœ์ข… ๋ฌธ์ œ ๋ฆฌ์ŠคํŠธ
List<ConnectQuizDto.ConnectQuiz> quizList = new ArrayList<>();
// ์ด๋ฏธ ์‚ฌ์šฉํ•œ ๋…ธ๋“œ Id ๊ธฐ๋ก์šฉ (์ค‘๋ณต ๋ฐฉ์ง€)
Set<Integer> usedNodeIds = new HashSet<>();
Set<String> usedNodeIds = new HashSet<>();

// ๋ฌธ์ œ 3๊ฐœ ๋งŒ๋“ค๊ธฐ
for (int i = 0; i < 3; i++) {
Expand All @@ -53,47 +53,42 @@ public ConnectQuizDto generate(Graph graph) {
}

// connect ํ€ด์ฆˆ ๋ฌธ์ œ ์ƒ์„ฑ
private static void createConnectQuiz(Random random, List<NodeDto> nodeDtoList, List<ConnectQuizDto.ConnectQuiz> quizList, Set<Integer> usedNodeIndices) {
if(usedNodeIndices.size() >= nodeDtoList.size()) {
// ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋‹ค ์‚ฌ์šฉํ–ˆ์œผ๋ฉด ์ถ”๊ฐ€ ์ƒ์„ฑ ๋ถˆ๊ฐ€
return;
}
private static void createConnectQuiz(Random random, List<NodeDto> nodeDtoList,
List<ConnectQuizDto.ConnectQuiz> quizList, Set<String> usedNodeIds) {
if (usedNodeIds.size() >= nodeDtoList.size()) return;

int questionTargetId;
NodeDto targetNode;
String targetId;

// nodeDtoList ์ค‘ 1๊ฐœ์˜ id๋กœ ๋žœ๋ค ์„ ํƒ (์ค‘๋ณต ๋ฐฉ์ง€)
// node์˜ ID(String) ๊ธฐ์ค€ ์ค‘๋ณต ์ฒดํฌ
do {
questionTargetId = random.nextInt(nodeDtoList.size());
} while (usedNodeIndices.contains(questionTargetId));
int randomIndex = random.nextInt(nodeDtoList.size());
targetNode = nodeDtoList.get(randomIndex);
targetId = String.valueOf(targetNode.getId());
} while (usedNodeIds.contains(targetId));

NodeDto targetNode = nodeDtoList.get(questionTargetId);
usedNodeIndices.add(questionTargetId); // ์‚ฌ์šฉํ•œ Id ์ถ”๊ฐ€
usedNodeIds.add(targetId); // ์‚ฌ์šฉ๋œ ID ๋“ฑ๋ก

// ์ •๋‹ต
String answer = targetNode.getLabel();

// ์ •๋‹ต ํฌํ•จ 5๊ฐœ ๋ณด๊ธฐ ์ƒ์„ฑ
Set<String> options = new HashSet<>();
options.add(answer); // ์ •๋‹ต ๋ณด๊ธฐ ์ถ”๊ฐ€
options.add(answer);

while (options.size() < 5) { // ๋žœ๋ค ๋ณด๊ธฐ ์ถ”๊ฐ€
while (options.size() < 5) {
int randomIndex = random.nextInt(nodeDtoList.size());
String option = nodeDtoList.get(randomIndex).getLabel();
options.add(option);
}

// ๋ณด๊ธฐ ๋ฆฌ์ŠคํŠธ ๋žœ๋ค ๋ฐฐ์น˜
List<String> shuffledOptions = new ArrayList<>(options);
Collections.shuffle(shuffledOptions);

// ๋ฌธ์ œ ํ•˜๋‚˜ ์ƒ์„ฑ
ConnectQuizDto.ConnectQuiz quiz = ConnectQuizDto.ConnectQuiz.builder()
.questionTargetId(String.valueOf(questionTargetId))
.questionTargetId(targetId) // ID๋Š” ์ด์ œ ๋ฌธ์ž์—ด
.shuffledOptions(shuffledOptions)
.answer(answer)
.build();

// ๋ฌธ์ œ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
quizList.add(quiz);
}
}