Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Backend_Config
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/* 사이퍼 쿼리문 예시
// 사이퍼 쿼리문 예시
/*
import com.going.server.domain.graph.entity.GraphNode;

CREATE (g:KnowledgeGraph {
Expand Down Expand Up @@ -32,15 +33,15 @@
MATCH (a:GraphNode { nodeId: 2 }), (b:GraphNode { nodeId: 3 })
CREATE (a)-[:RELATED { label: "응고" }]->(b);

// 전체 조회
MATCH (g:KnowledgeGraph { title: "물의 상태 변화" })-[:HAS_NODE]->(n:GraphNode)
OPTIONAL MATCH (n)-[r:RELATED]->(m:GraphNode)
RETURN g, n, r, m;
*/



/*
package com.going.server.domain.graph;
// 목 데이터 삽입
/*package com.going.server.domain.graph;

import com.going.server.domain.graph.entity.Graph;
import com.going.server.domain.graph.entity.GraphEdge;
Expand Down Expand Up @@ -95,7 +96,7 @@ public void run(String... args) {
node.setId(Long.valueOf(arr[0]));
node.setLabel(arr[1]);
node.setLevel(Integer.parseInt(arr[2]));
node.setDescription(arr[3]);
node.setIncludeSentence(arr[3]);
node.setGraph(graph);
nodeMap.put(arr[0], node);
}
Expand Down Expand Up @@ -127,4 +128,3 @@ private GraphEdge createEdge(Long edgeId, String label, GraphNode source, GraphN
return edge;
}
}*/

Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class GraphNode {

private String label;
private int level;
private String description;
private String includeSentence; //해당 노드(단어)가 포함된 문장

@Relationship(type = "HAS_GRAPH", direction = Relationship.Direction.INCOMING)
private Graph graph;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.going.server.domain.quiz.controller;

import com.going.server.domain.quiz.dto.QuizCreateResponseDto;
import com.going.server.domain.quiz.service.QuizService;
import com.going.server.domain.quiz.service.QuizServiceImpl;
import com.going.server.global.response.SuccessResponse;
import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -18,9 +19,9 @@
@Tag(name="[캡스톤]ListenUpQuiz", description = "퀴즈 관련 통신을 위한 API")
public class QuizController {

private QuizServiceImpl quizService;
private final QuizService quizService;

@PostMapping("/{graphId}?mode={mode}")
@PostMapping("/{graphId}")
@Operation(summary = "[퀴즈화면] 퀴즈 생성", description = "퀴즈 화면에서 해당 모드의 퀴즈를 생성합니다.")
@ApiResponses({
@ApiResponse(
Expand All @@ -34,7 +35,7 @@ public class QuizController {
})
public SuccessResponse<?> createQuiz(@PathVariable String graphId, @RequestParam String mode) {
QuizCreateResponseDto result = quizService.quizCreate(graphId, mode);
return SuccessResponse.of(result);
return SuccessResponse.of(result, "201");
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
package com.going.server.domain.quiz.dto;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class ConnectQuizDto {
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package com.going.server.domain.quiz.dto;

import lombok.Builder;
import lombok.Getter;

import java.util.List;

@Builder
@Getter
public class ListenUpQuizDto {
private List<ListenUpQuiz> quizzes;

@Builder
@Getter
public static class ListenUpQuiz {
private List<String> shuffled;
private List<String> answer;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
package com.going.server.domain.quiz.dto;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class PictureQuizDto {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Getter;

// 퀴즈 생성 반환 DTO
@AllArgsConstructor
@Getter
public class QuizCreateResponseDto<T> {
private String graphId;
private String mode; // listenUp, connect, picture
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
import com.going.server.domain.quiz.dto.QuizCreateResponseDto;
import org.springframework.stereotype.Service;

@Service
public interface QuizService {

// 모드 별 퀴즈 생성
public QuizCreateResponseDto quizCreate(String mode, String graphId);
public QuizCreateResponseDto quizCreate(String graphId, String mode);
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
package com.going.server.domain.quiz.service;

import com.going.server.domain.graph.entity.Graph;
import com.going.server.domain.graph.entity.GraphNode;
import com.going.server.domain.graph.exception.GraphNotFoundException;
import com.going.server.domain.graph.repository.GraphRepository;
import com.going.server.domain.quiz.dto.ConnectQuizDto;
import com.going.server.domain.quiz.dto.ListenUpQuizDto;
import com.going.server.domain.quiz.dto.PictureQuizDto;
import com.going.server.domain.quiz.dto.QuizCreateResponseDto;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
@AllArgsConstructor
public class QuizServiceImpl implements QuizService{
private final GraphRepository graphRepository;

@Override
public QuizCreateResponseDto quizCreate(String mode, String graphIdStr) {
public QuizCreateResponseDto quizCreate(String graphIdStr, String mode) {
Long graphId = Long.valueOf(graphIdStr);

// 404 : 지식그래프 찾을 수 없음
Expand Down Expand Up @@ -42,19 +47,64 @@ public QuizCreateResponseDto quizCreate(String mode, String graphIdStr) {

// listenUp 퀴즈 생성 메서드
private ListenUpQuizDto listenUpQuizCreate(Graph graph) {
// TODO : listenUp 퀴즈 생성 로직 작성
return new ListenUpQuizDto();
// 최종 리턴할 퀴즈 리스트 (3개)
List<ListenUpQuizDto.ListenUpQuiz> quizzes = new ArrayList<>();

Random random = new Random();

// 몇 개 퀴즈 만들었는지 세기 위한 변수 (3개까지만 만들 거임)
int count = 0;

// 그래프에 연결된 노드를 하나씩 확인
for (GraphNode node : graph.getNodes()) {

// includeSentence가 null이거나 공백이면 건너뛰기
if (node.getIncludeSentence() == null || node.getIncludeSentence().isBlank()) {
continue;
}

// includeSentence 문장을 띄어쓰기 기준으로 단어 분리
String[] words = node.getIncludeSentence().trim().split("\\s+");

// 단어 리스트를 정답 리스트로 저장
List<String> answer = Arrays.asList(words);

// 정답 리스트를 복사해서 셔플할 리스트로 사용
List<String> shuffled = new ArrayList<>(answer);
Collections.shuffle(shuffled, random); // 무작위로 단어 순서 섞기

// 하나의 퀴즈 생성
ListenUpQuizDto.ListenUpQuiz quiz = ListenUpQuizDto.ListenUpQuiz.builder()
.answer(answer) // 정답 리스트
.shuffled(shuffled) // 섞인(문제) 리스트
.description(node.getIncludeSentence()) // TTS로 읽어줄 원문 문장
.build();

// 퀴즈 리스트에 추가
quizzes.add(quiz);
count++;

// 3개 만들었으면 종료
if (count >= 3) break;
}

// 최종 퀴즈 DTO에 담아서 리턴
return ListenUpQuizDto.builder()
.quizzes(quizzes)
.build();
}

// connect 퀴즈 생성 메서드
private ConnectQuizDto connectQuizCreate(Graph graph) {
// TODO : connect 퀴즈 생성 로직 작성
return new ConnectQuizDto();
return ConnectQuizDto.builder()
.build();
}

// picture 퀴즈 생성 메서드
private PictureQuizDto pictureQuizCreate(Graph graph) {
// TODO : picture 퀴즈 생성 로직 작성
return new PictureQuizDto();
return PictureQuizDto.builder()
.build();
}
}