diff --git a/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/GetQuizController.java b/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/GetQuizController.java index 9b5f5ee..78913f1 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/GetQuizController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/GetQuizController.java @@ -1,10 +1,12 @@ package com.mangkyu.employment.interview.app.quiz.controller; import com.mangkyu.employment.interview.app.quiz.converter.QuizDtoConverter; +import com.mangkyu.employment.interview.app.quiz.entity.PagingQuizzes; import com.mangkyu.employment.interview.app.quiz.entity.Quiz; import com.mangkyu.employment.interview.app.quiz.service.GetQuizService; import com.mangkyu.employment.interview.enums.common.EnumMapperKey; import com.mangkyu.employment.interview.enums.factory.EnumMapperFactory; +import com.mangkyu.employment.interview.enums.value.QuizCategory; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -12,6 +14,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; +import java.util.stream.Collectors; @RestController @RequiredArgsConstructor @@ -32,10 +35,22 @@ class GetQuizController { @GetMapping("/quizzes") public ResponseEntity getQuizList(@Valid final GetQuizRequest getQuizRequest) { - final GetQuizResponseHolder response = quizService.getQuizList(getQuizRequest); + PagingQuizzes quizzes = quizService.getQuizList(getQuizRequest); + final GetQuizResponseHolder response = toResponse(quizzes, getQuizRequest.getCategory()); return ResponseEntity.ok(response); } + private GetQuizResponseHolder toResponse(PagingQuizzes quizzes, QuizCategory category) { + return GetQuizResponseHolder.builder() + .quizList(quizzes.getQuizzes().getQuizList().stream().map(QuizDtoConverter::convert).collect(Collectors.toList())) + .category(enumMapperFactory.getElement(EnumMapperKey.QUIZ_CATEGORY, category)) + .hasNext(quizzes.isHasNext()) + .page(quizzes.getPageNumber()) + .size(quizzes.getPageSize()) + .totalPages(quizzes.getTotalPages()) + .build(); + } + @GetMapping("/quizzes/search") public ResponseEntity searchQuizList(@Valid final SearchQuizListRequest request) { final GetQuizResponseHolder response = quizService.searchQuizList(request); diff --git a/src/main/java/com/mangkyu/employment/interview/app/quiz/entity/PagingQuizzes.java b/src/main/java/com/mangkyu/employment/interview/app/quiz/entity/PagingQuizzes.java new file mode 100644 index 0000000..581123f --- /dev/null +++ b/src/main/java/com/mangkyu/employment/interview/app/quiz/entity/PagingQuizzes.java @@ -0,0 +1,29 @@ +/* + * + * PagingQuizzes.java 2023-02-18 + * + * Copyright 2023 WorksMobile Corp. All rights Reserved. + * WorksMobile PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + */ + +package com.mangkyu.employment.interview.app.quiz.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PagingQuizzes { + + private Quizzes quizzes; + private boolean hasNext; + private int pageNumber; + private int pageSize; + private int totalPages; + +} diff --git a/src/main/java/com/mangkyu/employment/interview/app/quiz/service/GetQuizService.java b/src/main/java/com/mangkyu/employment/interview/app/quiz/service/GetQuizService.java index a0b4516..3a2e335 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/quiz/service/GetQuizService.java +++ b/src/main/java/com/mangkyu/employment/interview/app/quiz/service/GetQuizService.java @@ -2,12 +2,11 @@ package com.mangkyu.employment.interview.app.quiz.service; import com.mangkyu.employment.interview.app.quiz.controller.*; import com.mangkyu.employment.interview.app.quiz.converter.QuizDtoConverter; +import com.mangkyu.employment.interview.app.quiz.entity.PagingQuizzes; import com.mangkyu.employment.interview.app.quiz.entity.Quiz; import com.mangkyu.employment.interview.app.quiz.entity.Quizzes; import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository; import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository; -import com.mangkyu.employment.interview.enums.common.EnumMapperKey; -import com.mangkyu.employment.interview.enums.factory.EnumMapperFactory; import com.mangkyu.employment.interview.enums.value.QuizCategory; import com.mangkyu.employment.interview.enums.value.QuizLevel; import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode; @@ -31,7 +30,6 @@ public class GetQuizService { private final QuizRepository quizRepository; private final SolvedQuizRepository solvedQuizRepository; private final ModelMapper modelMapper; - private final EnumMapperFactory enumMapperFactory; public Quiz getQuiz(final String resourceId) { return quizRepository.findByResourceId(resourceId) @@ -49,20 +47,15 @@ public class GetQuizService { // TODO: do not use GetQuizResponseHolder in service layer - public GetQuizResponseHolder getQuizList(final GetQuizRequest getQuizRequest) { + public PagingQuizzes getQuizList(final GetQuizRequest getQuizRequest) { final PageRequest pageRequest = PageRequest.of(getQuizRequest.getPage(), getQuizRequest.getSize()); final Page quizPage = quizRepository.findByQuizCategoryIsAndIsEnableTrue(getQuizRequest.getCategory(), pageRequest); - final List quizResponseList = quizPage.getContent().stream() - .map(QuizDtoConverter::convert) - .collect(Collectors.toList()); - - return GetQuizResponseHolder.builder() - .quizList(quizResponseList) - .category(enumMapperFactory.getElement(EnumMapperKey.QUIZ_CATEGORY, getQuizRequest.getCategory())) + return PagingQuizzes.builder() + .quizzes(new Quizzes(quizPage.getContent())) .hasNext(quizPage.hasNext()) - .page(quizPage.nextOrLastPageable().getPageNumber()) - .size(quizPage.nextOrLastPageable().getPageSize()) + .pageNumber(quizPage.nextOrLastPageable().getPageNumber()) + .pageSize(quizPage.nextOrLastPageable().getPageSize()) .totalPages(quizPage.getTotalPages()) .build(); } diff --git a/src/test/java/com/mangkyu/employment/interview/app/quiz/controller/GetQuizControllerTest.java b/src/test/java/com/mangkyu/employment/interview/app/quiz/controller/GetQuizControllerTest.java index 1eb672e..48e6b68 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/quiz/controller/GetQuizControllerTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/quiz/controller/GetQuizControllerTest.java @@ -1,6 +1,8 @@ package com.mangkyu.employment.interview.app.quiz.controller; +import com.mangkyu.employment.interview.app.quiz.entity.PagingQuizzes; import com.mangkyu.employment.interview.app.quiz.entity.Quiz; +import com.mangkyu.employment.interview.app.quiz.entity.Quizzes; import com.mangkyu.employment.interview.app.quiz.service.GetQuizService; import com.mangkyu.employment.interview.enums.common.EnumMapperKey; import com.mangkyu.employment.interview.enums.common.EnumMapperType; @@ -24,6 +26,7 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import java.util.Arrays; import java.util.Collections; +import java.util.List; import java.util.stream.Stream; import static com.mangkyu.employment.interview.app.quiz.constants.QuizConstants.*; @@ -106,24 +109,20 @@ class GetQuizControllerTest { @Test void getQuizList() throws Exception { // given - final GetQuizResponse quizResponse = GetQuizResponse.builder() - .title("quiz") - .quizLevelList(Arrays.asList(QuizLevel.JUNIOR.name(), QuizLevel.SENIOR.name())) - .category(enumMapperValue(QuizCategory.JAVA).getTitle()) - .build(); + final Quiz quiz = EntityCreationUtils.quiz(); final Pageable pageable = PageRequest.of(MIN_PAGE_NUMBER, MIN_PAGE_SIZE); - final PageImpl quizPage = new PageImpl<>(Collections.emptyList(), pageable, 0); + final PageImpl quizPage = new PageImpl<>(Collections.emptyList(), pageable, 0); - final GetQuizResponseHolder getQuizResponseHolder = GetQuizResponseHolder.builder() - .quizList(Collections.singletonList(quizResponse)) + final PagingQuizzes quizzes = PagingQuizzes.builder() + .quizzes(new Quizzes(List.of(quiz))) .hasNext(quizPage.hasNext()) - .page(quizPage.nextOrLastPageable().getPageNumber()) - .size(quizPage.nextOrLastPageable().getPageSize()) + .pageNumber(quizPage.nextOrLastPageable().getPageNumber()) + .pageSize(quizPage.nextOrLastPageable().getPageSize()) .totalPages(quizPage.getTotalPages()) .build(); - doReturn(getQuizResponseHolder) + doReturn(quizzes) .when(quizService) .getQuizList(any(GetQuizRequest.class)); diff --git a/src/test/java/com/mangkyu/employment/interview/app/quiz/service/GetQuizServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/quiz/service/GetQuizServiceTest.java index 6a2094a..0dab779 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/quiz/service/GetQuizServiceTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/quiz/service/GetQuizServiceTest.java @@ -1,6 +1,7 @@ package com.mangkyu.employment.interview.app.quiz.service; import com.mangkyu.employment.interview.app.quiz.controller.*; +import com.mangkyu.employment.interview.app.quiz.entity.PagingQuizzes; import com.mangkyu.employment.interview.app.quiz.entity.Quizzes; import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository; import com.mangkyu.employment.interview.app.solvedquiz.entity.SolvedQuiz; @@ -135,12 +136,12 @@ class GetQuizServiceTest { .findByQuizCategoryIsAndIsEnableTrue(any(QuizCategory.class), any(PageRequest.class)); // when - final GetQuizResponseHolder result = quizService.getQuizList(request); + PagingQuizzes result = quizService.getQuizList(request); // then assertThat(result.isHasNext()).isFalse(); - assertThat(result.getPage()).isEqualTo(page); - assertThat(result.getSize()).isEqualTo(size); + assertThat(result.getPageNumber()).isEqualTo(page); + assertThat(result.getPageSize()).isEqualTo(size); } @Test