From 4151f3414f772de4ab80a355a1c8d057af19aab8 Mon Sep 17 00:00:00 2001 From: SL313 Date: Tue, 4 Feb 2025 00:32:43 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20newsletter=20id=EC=97=90=20?= =?UTF-8?q?=ED=95=B4=EB=8B=B9=ED=95=98=EB=8A=94=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../koschool/domain/quiz/QuizController.java | 11 +++++ .../response/NewsletterQuizResponseDto.java | 40 +++++++++++++++++++ .../quiz/repository/QuizRepository.java | 2 + .../domain/quiz/service/QuizService.java | 14 +++++++ 4 files changed, 67 insertions(+) create mode 100644 src/main/java/com/example/koschool/domain/quiz/dto/response/NewsletterQuizResponseDto.java diff --git a/src/main/java/com/example/koschool/domain/quiz/QuizController.java b/src/main/java/com/example/koschool/domain/quiz/QuizController.java index 5082030..7262b8c 100644 --- a/src/main/java/com/example/koschool/domain/quiz/QuizController.java +++ b/src/main/java/com/example/koschool/domain/quiz/QuizController.java @@ -1,6 +1,7 @@ package com.example.koschool.domain.quiz; import com.example.koschool.domain.quiz.dto.response.LevelQuizResponseDto; +import com.example.koschool.domain.quiz.dto.response.NewsletterQuizResponseDto; import com.example.koschool.domain.quiz.service.QuizService; import com.example.koschool.global.ApiResponse; import java.util.List; @@ -27,4 +28,14 @@ public class QuizController { public ApiResponse> levelQuiz(@RequestParam("level") String level) { return ApiResponse.of(HttpStatus.OK, quizService.levelQuiz(level)); } + + /** + * newsletter id에 해당하는 모든 문제 추출 + * @param newsletter + * @return + */ + @GetMapping("/newsletter") + public ApiResponse> newsletterQuiz(@RequestParam("newsletter") String newsletter) { + return ApiResponse.of(HttpStatus.OK, quizService.newsletterQuiz(newsletter)); + } } diff --git a/src/main/java/com/example/koschool/domain/quiz/dto/response/NewsletterQuizResponseDto.java b/src/main/java/com/example/koschool/domain/quiz/dto/response/NewsletterQuizResponseDto.java new file mode 100644 index 0000000..db4a34f --- /dev/null +++ b/src/main/java/com/example/koschool/domain/quiz/dto/response/NewsletterQuizResponseDto.java @@ -0,0 +1,40 @@ +package com.example.koschool.domain.quiz.dto.response; + +import com.example.koschool.domain.quiz.entity.Quiz; +import lombok.Builder; +import lombok.Getter; + +@Getter +public class NewsletterQuizResponseDto { + + private Long id; + private String question; + private String answer; + private String explanation; + private String wrongAnswer1; + private String wrongAnswer2; + private String wrongAnswer3; + + @Builder + private NewsletterQuizResponseDto(Long id, String question, String answer, String explanation, String wrongAnswer1, String wrongAnswer2, String wrongAnswer3) { + this.id = id; + this.question = question; + this.answer = answer; + this.explanation = explanation; + this.wrongAnswer1 = wrongAnswer1; + this.wrongAnswer2 = wrongAnswer2; + this.wrongAnswer3 = wrongAnswer3; + } + + public static NewsletterQuizResponseDto of(Quiz quiz) { + return NewsletterQuizResponseDto.builder() + .id(quiz.getId()) + .question(quiz.getQuestion()) + .answer(quiz.getAnswer()) + .explanation(quiz.getExplanation()) + .wrongAnswer1(quiz.getWrongAnswer1()) + .wrongAnswer2(quiz.getWrongAnswer2()) + .wrongAnswer3(quiz.getWrongAnswer3()) + .build(); + } +} diff --git a/src/main/java/com/example/koschool/domain/quiz/repository/QuizRepository.java b/src/main/java/com/example/koschool/domain/quiz/repository/QuizRepository.java index 2052e5c..dafd56c 100644 --- a/src/main/java/com/example/koschool/domain/quiz/repository/QuizRepository.java +++ b/src/main/java/com/example/koschool/domain/quiz/repository/QuizRepository.java @@ -12,5 +12,7 @@ public interface QuizRepository extends JpaRepository { @Query("SELECT q FROM Quiz q WHERE q.newsletterId IS NULL AND q.level = :level ORDER BY FUNCTION('RAND')") List findRandomQuizzesByLevel(@Param("level") String level, Pageable pageable); + @Query("SELECT q FROM Quiz q WHERE q.newsletterId IN :newsletterIds") + List findQuizzesByNewsletterIds(@Param("newsletterIds") List newsletterIds); } diff --git a/src/main/java/com/example/koschool/domain/quiz/service/QuizService.java b/src/main/java/com/example/koschool/domain/quiz/service/QuizService.java index fc0b66a..d04dd4f 100644 --- a/src/main/java/com/example/koschool/domain/quiz/service/QuizService.java +++ b/src/main/java/com/example/koschool/domain/quiz/service/QuizService.java @@ -1,8 +1,10 @@ package com.example.koschool.domain.quiz.service; import com.example.koschool.domain.quiz.dto.response.LevelQuizResponseDto; +import com.example.koschool.domain.quiz.dto.response.NewsletterQuizResponseDto; 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; @@ -25,4 +27,16 @@ public List levelQuiz(String level) { .map(LevelQuizResponseDto::of) .collect(Collectors.toList()); } + + public List newsletterQuiz(String newsletter) { + List newsletterIdList = Arrays.stream(newsletter.split(",")) + .map(Long::parseLong) + .collect(Collectors.toList()); + + List quizList = quizRepository.findQuizzesByNewsletterIds(newsletterIdList); + + return quizList.stream() + .map(NewsletterQuizResponseDto::of) + .collect(Collectors.toList()); + } } From 334c3da2e6b9cf92b7c40aa1bbbb350089ef90a4 Mon Sep 17 00:00:00 2001 From: SL313 Date: Tue, 4 Feb 2025 00:35:00 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20QuizResponseDto=20=ED=9A=A8?= =?UTF-8?q?=EC=9C=A8=ED=99=94=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../koschool/domain/quiz/QuizController.java | 7 ++-- .../response/NewsletterQuizResponseDto.java | 40 ------------------- ...zResponseDto.java => QuizResponseDto.java} | 8 ++-- .../domain/quiz/service/QuizService.java | 11 +++-- 4 files changed, 12 insertions(+), 54 deletions(-) delete mode 100644 src/main/java/com/example/koschool/domain/quiz/dto/response/NewsletterQuizResponseDto.java rename src/main/java/com/example/koschool/domain/quiz/dto/response/{LevelQuizResponseDto.java => QuizResponseDto.java} (76%) diff --git a/src/main/java/com/example/koschool/domain/quiz/QuizController.java b/src/main/java/com/example/koschool/domain/quiz/QuizController.java index 7262b8c..f323d2d 100644 --- a/src/main/java/com/example/koschool/domain/quiz/QuizController.java +++ b/src/main/java/com/example/koschool/domain/quiz/QuizController.java @@ -1,7 +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.NewsletterQuizResponseDto; +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; @@ -25,7 +24,7 @@ public class QuizController { * @return */ @GetMapping("/level") - public ApiResponse> levelQuiz(@RequestParam("level") String level) { + public ApiResponse> levelQuiz(@RequestParam("level") String level) { return ApiResponse.of(HttpStatus.OK, quizService.levelQuiz(level)); } @@ -35,7 +34,7 @@ public ApiResponse> levelQuiz(@RequestParam("level") * @return */ @GetMapping("/newsletter") - public ApiResponse> newsletterQuiz(@RequestParam("newsletter") String newsletter) { + public ApiResponse> newsletterQuiz(@RequestParam("newsletter") String newsletter) { return ApiResponse.of(HttpStatus.OK, quizService.newsletterQuiz(newsletter)); } } diff --git a/src/main/java/com/example/koschool/domain/quiz/dto/response/NewsletterQuizResponseDto.java b/src/main/java/com/example/koschool/domain/quiz/dto/response/NewsletterQuizResponseDto.java deleted file mode 100644 index db4a34f..0000000 --- a/src/main/java/com/example/koschool/domain/quiz/dto/response/NewsletterQuizResponseDto.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.example.koschool.domain.quiz.dto.response; - -import com.example.koschool.domain.quiz.entity.Quiz; -import lombok.Builder; -import lombok.Getter; - -@Getter -public class NewsletterQuizResponseDto { - - private Long id; - private String question; - private String answer; - private String explanation; - private String wrongAnswer1; - private String wrongAnswer2; - private String wrongAnswer3; - - @Builder - private NewsletterQuizResponseDto(Long id, String question, String answer, String explanation, String wrongAnswer1, String wrongAnswer2, String wrongAnswer3) { - this.id = id; - this.question = question; - this.answer = answer; - this.explanation = explanation; - this.wrongAnswer1 = wrongAnswer1; - this.wrongAnswer2 = wrongAnswer2; - this.wrongAnswer3 = wrongAnswer3; - } - - public static NewsletterQuizResponseDto of(Quiz quiz) { - return NewsletterQuizResponseDto.builder() - .id(quiz.getId()) - .question(quiz.getQuestion()) - .answer(quiz.getAnswer()) - .explanation(quiz.getExplanation()) - .wrongAnswer1(quiz.getWrongAnswer1()) - .wrongAnswer2(quiz.getWrongAnswer2()) - .wrongAnswer3(quiz.getWrongAnswer3()) - .build(); - } -} diff --git a/src/main/java/com/example/koschool/domain/quiz/dto/response/LevelQuizResponseDto.java b/src/main/java/com/example/koschool/domain/quiz/dto/response/QuizResponseDto.java similarity index 76% rename from src/main/java/com/example/koschool/domain/quiz/dto/response/LevelQuizResponseDto.java rename to src/main/java/com/example/koschool/domain/quiz/dto/response/QuizResponseDto.java index d1e487e..f52a3d5 100644 --- a/src/main/java/com/example/koschool/domain/quiz/dto/response/LevelQuizResponseDto.java +++ b/src/main/java/com/example/koschool/domain/quiz/dto/response/QuizResponseDto.java @@ -5,7 +5,7 @@ import lombok.Getter; @Getter -public class LevelQuizResponseDto { +public class QuizResponseDto { private Long id; private String question; @@ -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; @@ -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()) diff --git a/src/main/java/com/example/koschool/domain/quiz/service/QuizService.java b/src/main/java/com/example/koschool/domain/quiz/service/QuizService.java index d04dd4f..d0b7b4f 100644 --- a/src/main/java/com/example/koschool/domain/quiz/service/QuizService.java +++ b/src/main/java/com/example/koschool/domain/quiz/service/QuizService.java @@ -1,7 +1,6 @@ package com.example.koschool.domain.quiz.service; -import com.example.koschool.domain.quiz.dto.response.LevelQuizResponseDto; -import com.example.koschool.domain.quiz.dto.response.NewsletterQuizResponseDto; +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; @@ -20,15 +19,15 @@ public class QuizService { private final QuizRepository quizRepository; - public List levelQuiz(String level) { + public List levelQuiz(String level) { Pageable pageable = PageRequest.of(0, 10); List quizList = quizRepository.findRandomQuizzesByLevel(level, pageable); return quizList.stream() - .map(LevelQuizResponseDto::of) + .map(QuizResponseDto::of) .collect(Collectors.toList()); } - public List newsletterQuiz(String newsletter) { + public List newsletterQuiz(String newsletter) { List newsletterIdList = Arrays.stream(newsletter.split(",")) .map(Long::parseLong) .collect(Collectors.toList()); @@ -36,7 +35,7 @@ public List newsletterQuiz(String newsletter) { List quizList = quizRepository.findQuizzesByNewsletterIds(newsletterIdList); return quizList.stream() - .map(NewsletterQuizResponseDto::of) + .map(QuizResponseDto::of) .collect(Collectors.toList()); } }