Skip to content

Commit 763894b

Browse files
committed
✨ feat : 문제와 함께 퀴즈 조회 API 구현
1 parent 5501997 commit 763894b

File tree

7 files changed

+60
-4
lines changed

7 files changed

+60
-4
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package io.f1.backend.domain.question.dto;
2+
3+
public record QuestionResponse(Long id, String content, String answer) { }

backend/src/main/java/io/f1/backend/domain/question/entity/Question.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
import jakarta.persistence.OneToOne;
1616

1717
import lombok.AccessLevel;
18+
import lombok.Getter;
1819
import lombok.NoArgsConstructor;
1920

2021
@Entity
22+
@Getter
2123
@NoArgsConstructor(access = AccessLevel.PROTECTED)
2224
public class Question extends BaseEntity {
2325

backend/src/main/java/io/f1/backend/domain/question/entity/TextQuestion.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99
import jakarta.persistence.OneToOne;
1010

1111
import lombok.AccessLevel;
12+
import lombok.Getter;
1213
import lombok.NoArgsConstructor;
1314

1415
@Entity
16+
@Getter
1517
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1618
public class TextQuestion {
1719

backend/src/main/java/io/f1/backend/domain/quiz/api/QuizController.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.f1.backend.domain.quiz.dto.QuizCreateRequest;
55
import io.f1.backend.domain.quiz.dto.QuizCreateResponse;
66
import io.f1.backend.domain.quiz.dto.QuizListPageResponse;
7+
import io.f1.backend.domain.quiz.dto.QuizQuestionListResponse;
78
import io.f1.backend.domain.quiz.dto.QuizUpdateRequest;
89

910
import jakarta.validation.Valid;
@@ -78,4 +79,12 @@ public ResponseEntity<QuizListPageResponse> getQuizzes(
7879

7980
return ResponseEntity.ok().body(quizzes);
8081
}
82+
83+
@GetMapping("/{quizId}")
84+
public ResponseEntity<QuizQuestionListResponse> getQuizWithQuestions(@PathVariable Long quizId) {
85+
86+
QuizQuestionListResponse response = quizService.getQuizWithQuestions(quizId);
87+
88+
return ResponseEntity.ok().body(response);
89+
}
8190
}

backend/src/main/java/io/f1/backend/domain/quiz/app/QuizService.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package io.f1.backend.domain.quiz.app;
22

3-
import static io.f1.backend.domain.quiz.mapper.QuizMapper.pageQuizToPageQuizListResponse;
4-
import static io.f1.backend.domain.quiz.mapper.QuizMapper.quizCreateRequestToQuiz;
5-
import static io.f1.backend.domain.quiz.mapper.QuizMapper.quizToQuizCreateResponse;
6-
import static io.f1.backend.domain.quiz.mapper.QuizMapper.toQuizListPageResponse;
3+
import static io.f1.backend.domain.quiz.mapper.QuizMapper.*;
74

85
import static java.nio.file.Files.deleteIfExists;
96

@@ -14,6 +11,7 @@
1411
import io.f1.backend.domain.quiz.dto.QuizCreateResponse;
1512
import io.f1.backend.domain.quiz.dto.QuizListPageResponse;
1613
import io.f1.backend.domain.quiz.dto.QuizListResponse;
14+
import io.f1.backend.domain.quiz.dto.QuizQuestionListResponse;
1715
import io.f1.backend.domain.quiz.dto.QuizUpdateRequest;
1816
import io.f1.backend.domain.quiz.entity.Quiz;
1917
import io.f1.backend.domain.user.dao.UserRepository;
@@ -198,4 +196,11 @@ public Quiz getQuizById(Long quizId) {
198196
.findById(quizId)
199197
.orElseThrow(() -> new RuntimeException("E404002: 존재하지 않는 퀴즈입니다."));
200198
}
199+
200+
public QuizQuestionListResponse getQuizWithQuestions(Long quizId) {
201+
Quiz quiz = quizRepository.findById(quizId)
202+
.orElseThrow(() -> new NoSuchElementException("존재하지 않는 퀴즈입니다."));
203+
204+
return quizToQuizQuestionListResponse(quiz);
205+
}
201206
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.f1.backend.domain.quiz.dto;
2+
3+
import io.f1.backend.domain.question.dto.QuestionResponse;
4+
import io.f1.backend.domain.quiz.entity.QuizType;
5+
import java.util.List;
6+
7+
public record QuizQuestionListResponse(String title, QuizType quizType, Long creatorId, String description, String thumbnailUrl, int numberOfQuestion, List<QuestionResponse> questions) {
8+
9+
}

backend/src/main/java/io/f1/backend/domain/quiz/mapper/QuizMapper.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package io.f1.backend.domain.quiz.mapper;
22

3+
import io.f1.backend.domain.question.dto.QuestionResponse;
4+
import io.f1.backend.domain.question.entity.Question;
35
import io.f1.backend.domain.quiz.dto.QuizCreateRequest;
46
import io.f1.backend.domain.quiz.dto.QuizCreateResponse;
57
import io.f1.backend.domain.quiz.dto.QuizListPageResponse;
68
import io.f1.backend.domain.quiz.dto.QuizListResponse;
9+
import io.f1.backend.domain.quiz.dto.QuizQuestionListResponse;
710
import io.f1.backend.domain.quiz.entity.Quiz;
811
import io.f1.backend.domain.user.entity.User;
912

13+
import java.util.List;
1014
import org.springframework.data.domain.Page;
1115

1216
public class QuizMapper {
@@ -56,4 +60,26 @@ public static QuizListPageResponse toQuizListPageResponse(Page<QuizListResponse>
5660
public static Page<QuizListResponse> pageQuizToPageQuizListResponse(Page<Quiz> quizzes) {
5761
return quizzes.map(QuizMapper::quizToQuizListResponse);
5862
}
63+
64+
public static List<QuestionResponse> questionsToQuestionResponses(List<Question> questions) {
65+
return questions.stream()
66+
.map(question -> new QuestionResponse(
67+
question.getId(),
68+
question.getTextQuestion().getContent(),
69+
question.getAnswer()
70+
))
71+
.toList();
72+
}
73+
74+
public static QuizQuestionListResponse quizToQuizQuestionListResponse(Quiz quiz) {
75+
return new QuizQuestionListResponse(
76+
quiz.getTitle(),
77+
quiz.getQuizType(),
78+
quiz.getCreator().getId(),
79+
quiz.getDescription(),
80+
quiz.getThumbnailUrl(),
81+
quiz.getQuestions().size(),
82+
questionsToQuestionResponses(quiz.getQuestions())
83+
);
84+
}
5985
}

0 commit comments

Comments
 (0)