diff --git a/backend/src/main/java/io/f1/backend/domain/question/dto/QuestionResponse.java b/backend/src/main/java/io/f1/backend/domain/question/dto/QuestionResponse.java new file mode 100644 index 00000000..3e6946a6 --- /dev/null +++ b/backend/src/main/java/io/f1/backend/domain/question/dto/QuestionResponse.java @@ -0,0 +1,3 @@ +package io.f1.backend.domain.question.dto; + +public record QuestionResponse(Long id, String content, String answer) {} diff --git a/backend/src/main/java/io/f1/backend/domain/question/entity/Question.java b/backend/src/main/java/io/f1/backend/domain/question/entity/Question.java index 1b769383..b197ac6e 100644 --- a/backend/src/main/java/io/f1/backend/domain/question/entity/Question.java +++ b/backend/src/main/java/io/f1/backend/domain/question/entity/Question.java @@ -15,9 +15,11 @@ import jakarta.persistence.OneToOne; import lombok.AccessLevel; +import lombok.Getter; import lombok.NoArgsConstructor; @Entity +@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Question extends BaseEntity { diff --git a/backend/src/main/java/io/f1/backend/domain/question/entity/TextQuestion.java b/backend/src/main/java/io/f1/backend/domain/question/entity/TextQuestion.java index 61eed1c7..7adf05c1 100644 --- a/backend/src/main/java/io/f1/backend/domain/question/entity/TextQuestion.java +++ b/backend/src/main/java/io/f1/backend/domain/question/entity/TextQuestion.java @@ -9,9 +9,11 @@ import jakarta.persistence.OneToOne; import lombok.AccessLevel; +import lombok.Getter; import lombok.NoArgsConstructor; @Entity +@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class TextQuestion { diff --git a/backend/src/main/java/io/f1/backend/domain/quiz/api/QuizController.java b/backend/src/main/java/io/f1/backend/domain/quiz/api/QuizController.java index 8439f4e3..64b4846e 100644 --- a/backend/src/main/java/io/f1/backend/domain/quiz/api/QuizController.java +++ b/backend/src/main/java/io/f1/backend/domain/quiz/api/QuizController.java @@ -4,6 +4,7 @@ import io.f1.backend.domain.quiz.dto.QuizCreateRequest; import io.f1.backend.domain.quiz.dto.QuizCreateResponse; import io.f1.backend.domain.quiz.dto.QuizListPageResponse; +import io.f1.backend.domain.quiz.dto.QuizQuestionListResponse; import io.f1.backend.domain.quiz.dto.QuizUpdateRequest; import jakarta.validation.Valid; @@ -78,4 +79,13 @@ public ResponseEntity getQuizzes( return ResponseEntity.ok().body(quizzes); } + + @GetMapping("/{quizId}") + public ResponseEntity getQuizWithQuestions( + @PathVariable Long quizId) { + + QuizQuestionListResponse response = quizService.getQuizWithQuestions(quizId); + + return ResponseEntity.ok().body(response); + } } 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 94a8dba4..8474cde8 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 @@ -1,9 +1,6 @@ package io.f1.backend.domain.quiz.app; -import static io.f1.backend.domain.quiz.mapper.QuizMapper.pageQuizToPageQuizListResponse; -import static io.f1.backend.domain.quiz.mapper.QuizMapper.quizCreateRequestToQuiz; -import static io.f1.backend.domain.quiz.mapper.QuizMapper.quizToQuizCreateResponse; -import static io.f1.backend.domain.quiz.mapper.QuizMapper.toQuizListPageResponse; +import static io.f1.backend.domain.quiz.mapper.QuizMapper.*; import static java.nio.file.Files.deleteIfExists; @@ -14,6 +11,7 @@ import io.f1.backend.domain.quiz.dto.QuizCreateResponse; import io.f1.backend.domain.quiz.dto.QuizListPageResponse; import io.f1.backend.domain.quiz.dto.QuizListResponse; +import io.f1.backend.domain.quiz.dto.QuizQuestionListResponse; import io.f1.backend.domain.quiz.dto.QuizUpdateRequest; import io.f1.backend.domain.quiz.entity.Quiz; import io.f1.backend.domain.user.dao.UserRepository; @@ -198,4 +196,13 @@ public Quiz getQuizById(Long quizId) { .findById(quizId) .orElseThrow(() -> new RuntimeException("E404002: 존재하지 않는 퀴즈입니다.")); } + + public QuizQuestionListResponse getQuizWithQuestions(Long quizId) { + Quiz quiz = + quizRepository + .findById(quizId) + .orElseThrow(() -> new NoSuchElementException("존재하지 않는 퀴즈입니다.")); + + return quizToQuizQuestionListResponse(quiz); + } } diff --git a/backend/src/main/java/io/f1/backend/domain/quiz/dto/QuizQuestionListResponse.java b/backend/src/main/java/io/f1/backend/domain/quiz/dto/QuizQuestionListResponse.java new file mode 100644 index 00000000..66b9516f --- /dev/null +++ b/backend/src/main/java/io/f1/backend/domain/quiz/dto/QuizQuestionListResponse.java @@ -0,0 +1,15 @@ +package io.f1.backend.domain.quiz.dto; + +import io.f1.backend.domain.question.dto.QuestionResponse; +import io.f1.backend.domain.quiz.entity.QuizType; + +import java.util.List; + +public record QuizQuestionListResponse( + String title, + QuizType quizType, + Long creatorId, + String description, + String thumbnailUrl, + int numberOfQuestion, + List questions) {} diff --git a/backend/src/main/java/io/f1/backend/domain/quiz/mapper/QuizMapper.java b/backend/src/main/java/io/f1/backend/domain/quiz/mapper/QuizMapper.java index e6bf88e8..b515f679 100644 --- a/backend/src/main/java/io/f1/backend/domain/quiz/mapper/QuizMapper.java +++ b/backend/src/main/java/io/f1/backend/domain/quiz/mapper/QuizMapper.java @@ -1,14 +1,19 @@ package io.f1.backend.domain.quiz.mapper; +import io.f1.backend.domain.question.dto.QuestionResponse; +import io.f1.backend.domain.question.entity.Question; import io.f1.backend.domain.quiz.dto.QuizCreateRequest; import io.f1.backend.domain.quiz.dto.QuizCreateResponse; import io.f1.backend.domain.quiz.dto.QuizListPageResponse; import io.f1.backend.domain.quiz.dto.QuizListResponse; +import io.f1.backend.domain.quiz.dto.QuizQuestionListResponse; import io.f1.backend.domain.quiz.entity.Quiz; import io.f1.backend.domain.user.entity.User; import org.springframework.data.domain.Page; +import java.util.List; + public class QuizMapper { // TODO : 이후 파라미터에서 user 삭제하기 @@ -56,4 +61,26 @@ public static QuizListPageResponse toQuizListPageResponse(Page public static Page pageQuizToPageQuizListResponse(Page quizzes) { return quizzes.map(QuizMapper::quizToQuizListResponse); } + + public static List questionsToQuestionResponses(List questions) { + return questions.stream() + .map( + question -> + new QuestionResponse( + question.getId(), + question.getTextQuestion().getContent(), + question.getAnswer())) + .toList(); + } + + public static QuizQuestionListResponse quizToQuizQuestionListResponse(Quiz quiz) { + return new QuizQuestionListResponse( + quiz.getTitle(), + quiz.getQuizType(), + quiz.getCreator().getId(), + quiz.getDescription(), + quiz.getThumbnailUrl(), + quiz.getQuestions().size(), + questionsToQuestionResponses(quiz.getQuestions())); + } }