Refactor getQuizList

This commit is contained in:
MangKyu
2023-02-18 22:22:29 +09:00
parent cffac499b7
commit d52978cfa4
5 changed files with 65 additions and 28 deletions

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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();
}

View File

@@ -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));

View File

@@ -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