Refactor getQuizList
This commit is contained in:
@@ -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<GetQuizResponseHolder> 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<GetQuizResponseHolder> searchQuizList(@Valid final SearchQuizListRequest request) {
|
||||
final GetQuizResponseHolder response = quizService.searchQuizList(request);
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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<Quiz> quizPage = quizRepository.findByQuizCategoryIsAndIsEnableTrue(getQuizRequest.getCategory(), pageRequest);
|
||||
|
||||
final List<GetQuizResponse> 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();
|
||||
}
|
||||
|
||||
@@ -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<com.mangkyu.employment.interview.app.quiz.entity.Quiz> quizPage = new PageImpl<>(Collections.emptyList(), pageable, 0);
|
||||
final PageImpl<Quiz> 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));
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user