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
14 changes: 12 additions & 2 deletions src/main/java/com/example/koschool/domain/quiz/QuizController.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.koschool.domain.quiz;

import com.example.koschool.domain.quiz.dto.response.LevelQuizResponseDto;
import com.example.koschool.domain.quiz.dto.response.QuizResponseDto;
import com.example.koschool.domain.quiz.service.QuizService;
import com.example.koschool.global.ApiResponse;
import java.util.List;
Expand All @@ -24,7 +24,17 @@ public class QuizController {
* @return
*/
@GetMapping("/level")
public ApiResponse<List<LevelQuizResponseDto>> levelQuiz(@RequestParam("level") String level) {
public ApiResponse<List<QuizResponseDto>> levelQuiz(@RequestParam("level") String level) {
return ApiResponse.of(HttpStatus.OK, quizService.levelQuiz(level));
}

/**
* newsletter id에 해당하는 모든 문제 추출
* @param newsletter
* @return
*/
@GetMapping("/newsletter")
public ApiResponse<List<QuizResponseDto>> newsletterQuiz(@RequestParam("newsletter") String newsletter) {
return ApiResponse.of(HttpStatus.OK, quizService.newsletterQuiz(newsletter));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import lombok.Getter;

@Getter
public class LevelQuizResponseDto {
public class QuizResponseDto {

private Long id;
private String question;
Expand All @@ -16,7 +16,7 @@ public class LevelQuizResponseDto {
private String wrongAnswer3;

@Builder
private LevelQuizResponseDto(Long id, String question, String answer, String explanation, String wrongAnswer1, String wrongAnswer2, String wrongAnswer3) {
private QuizResponseDto(Long id, String question, String answer, String explanation, String wrongAnswer1, String wrongAnswer2, String wrongAnswer3) {
this.id = id;
this.question = question;
this.answer = answer;
Expand All @@ -26,8 +26,8 @@ private LevelQuizResponseDto(Long id, String question, String answer, String exp
this.wrongAnswer3 = wrongAnswer3;
}

public static LevelQuizResponseDto of(Quiz quiz) {
return LevelQuizResponseDto.builder()
public static QuizResponseDto of(Quiz quiz) {
return QuizResponseDto.builder()
.id(quiz.getId())
.question(quiz.getQuestion())
.answer(quiz.getAnswer())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,7 @@ public interface QuizRepository extends JpaRepository<Quiz, String> {
@Query("SELECT q FROM Quiz q WHERE q.newsletterId IS NULL AND q.level = :level ORDER BY FUNCTION('RAND')")
List<Quiz> findRandomQuizzesByLevel(@Param("level") String level, Pageable pageable);

@Query("SELECT q FROM Quiz q WHERE q.newsletterId IN :newsletterIds")
List<Quiz> findQuizzesByNewsletterIds(@Param("newsletterIds") List<Long> newsletterIds);

}
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.example.koschool.domain.quiz.service;

import com.example.koschool.domain.quiz.dto.response.LevelQuizResponseDto;
import com.example.koschool.domain.quiz.dto.response.QuizResponseDto;
import com.example.koschool.domain.quiz.entity.Quiz;
import com.example.koschool.domain.quiz.repository.QuizRepository;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
Expand All @@ -18,11 +19,23 @@ public class QuizService {

private final QuizRepository quizRepository;

public List<LevelQuizResponseDto> levelQuiz(String level) {
public List<QuizResponseDto> levelQuiz(String level) {
Pageable pageable = PageRequest.of(0, 10);
List<Quiz> quizList = quizRepository.findRandomQuizzesByLevel(level, pageable);
return quizList.stream()
.map(LevelQuizResponseDto::of)
.map(QuizResponseDto::of)
.collect(Collectors.toList());
}

public List<QuizResponseDto> newsletterQuiz(String newsletter) {
List<Long> newsletterIdList = Arrays.stream(newsletter.split(","))
.map(Long::parseLong)
.collect(Collectors.toList());

List<Quiz> quizList = quizRepository.findQuizzesByNewsletterIds(newsletterIdList);

return quizList.stream()
.map(QuizResponseDto::of)
.collect(Collectors.toList());
}
}