Skip to content

Commit 0ba0181

Browse files
✨ feat : 문제와 함께 퀴즈 조회 API 구현 (#38)
* ✨ feat : 문제와 함께 퀴즈 조회 API 구현 * chore: Java 스타일 수정 --------- Co-authored-by: github-actions <>
1 parent 233cc6d commit 0ba0181

File tree

7 files changed

+70
-4
lines changed

7 files changed

+70
-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: 10 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,13 @@ public ResponseEntity<QuizListPageResponse> getQuizzes(
7879

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

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

Lines changed: 11 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;
@@ -206,4 +204,13 @@ public Quiz getQuizById(Long quizId) {
206204
public Long getQuizMinId() {
207205
return quizRepository.getQuizMinId();
208206
}
207+
208+
public QuizQuestionListResponse getQuizWithQuestions(Long quizId) {
209+
Quiz quiz =
210+
quizRepository
211+
.findById(quizId)
212+
.orElseThrow(() -> new NoSuchElementException("존재하지 않는 퀴즈입니다."));
213+
214+
return quizToQuizQuestionListResponse(quiz);
215+
}
209216
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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+
6+
import java.util.List;
7+
8+
public record QuizQuestionListResponse(
9+
String title,
10+
QuizType quizType,
11+
Long creatorId,
12+
String description,
13+
String thumbnailUrl,
14+
int numberOfQuestion,
15+
List<QuestionResponse> questions) {}

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
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

1013
import org.springframework.data.domain.Page;
1114

15+
import java.util.List;
16+
1217
public class QuizMapper {
1318

1419
// TODO : 이후 파라미터에서 user 삭제하기
@@ -56,4 +61,26 @@ public static QuizListPageResponse toQuizListPageResponse(Page<QuizListResponse>
5661
public static Page<QuizListResponse> pageQuizToPageQuizListResponse(Page<Quiz> quizzes) {
5762
return quizzes.map(QuizMapper::quizToQuizListResponse);
5863
}
64+
65+
public static List<QuestionResponse> questionsToQuestionResponses(List<Question> questions) {
66+
return questions.stream()
67+
.map(
68+
question ->
69+
new QuestionResponse(
70+
question.getId(),
71+
question.getTextQuestion().getContent(),
72+
question.getAnswer()))
73+
.toList();
74+
}
75+
76+
public static QuizQuestionListResponse quizToQuizQuestionListResponse(Quiz quiz) {
77+
return new QuizQuestionListResponse(
78+
quiz.getTitle(),
79+
quiz.getQuizType(),
80+
quiz.getCreator().getId(),
81+
quiz.getDescription(),
82+
quiz.getThumbnailUrl(),
83+
quiz.getQuestions().size(),
84+
questionsToQuestionResponses(quiz.getQuestions()));
85+
}
5986
}

0 commit comments

Comments
 (0)