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
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package io.f1.backend.domain.question.dto;

public record QuestionResponse(Long id, String content, String answer) {}
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -78,4 +79,13 @@ public ResponseEntity<QuizListPageResponse> getQuizzes(

return ResponseEntity.ok().body(quizzes);
}

@GetMapping("/{quizId}")
public ResponseEntity<QuizQuestionListResponse> getQuizWithQuestions(
@PathVariable Long quizId) {

QuizQuestionListResponse response = quizService.getQuizWithQuestions(quizId);

return ResponseEntity.ok().body(response);
}
}
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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;
Expand Down Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[L5-참고의견]
creatorId는 필수 값이어서 밑의 numberOfQuestion처럼 원시타입으로 통일해도 될 것 같습니다.

String description,
String thumbnailUrl,
int numberOfQuestion,
List<QuestionResponse> questions) {}
Original file line number Diff line number Diff line change
@@ -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 삭제하기
Expand Down Expand Up @@ -56,4 +61,26 @@ public static QuizListPageResponse toQuizListPageResponse(Page<QuizListResponse>
public static Page<QuizListResponse> pageQuizToPageQuizListResponse(Page<Quiz> quizzes) {
return quizzes.map(QuizMapper::quizToQuizListResponse);
}

public static List<QuestionResponse> questionsToQuestionResponses(List<Question> 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()));
}
}