Refactor getQuizList
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
package com.mangkyu.employment.interview.app.quiz.controller;
|
||||||
|
|
||||||
import com.mangkyu.employment.interview.app.quiz.converter.QuizDtoConverter;
|
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.Quiz;
|
||||||
import com.mangkyu.employment.interview.app.quiz.service.GetQuizService;
|
import com.mangkyu.employment.interview.app.quiz.service.GetQuizService;
|
||||||
import com.mangkyu.employment.interview.enums.common.EnumMapperKey;
|
import com.mangkyu.employment.interview.enums.common.EnumMapperKey;
|
||||||
import com.mangkyu.employment.interview.enums.factory.EnumMapperFactory;
|
import com.mangkyu.employment.interview.enums.factory.EnumMapperFactory;
|
||||||
|
import com.mangkyu.employment.interview.enums.value.QuizCategory;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
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 org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@@ -32,10 +35,22 @@ class GetQuizController {
|
|||||||
|
|
||||||
@GetMapping("/quizzes")
|
@GetMapping("/quizzes")
|
||||||
public ResponseEntity<GetQuizResponseHolder> getQuizList(@Valid final GetQuizRequest getQuizRequest) {
|
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);
|
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")
|
@GetMapping("/quizzes/search")
|
||||||
public ResponseEntity<GetQuizResponseHolder> searchQuizList(@Valid final SearchQuizListRequest request) {
|
public ResponseEntity<GetQuizResponseHolder> searchQuizList(@Valid final SearchQuizListRequest request) {
|
||||||
final GetQuizResponseHolder response = quizService.searchQuizList(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.controller.*;
|
||||||
import com.mangkyu.employment.interview.app.quiz.converter.QuizDtoConverter;
|
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.Quiz;
|
||||||
import com.mangkyu.employment.interview.app.quiz.entity.Quizzes;
|
import com.mangkyu.employment.interview.app.quiz.entity.Quizzes;
|
||||||
import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository;
|
import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository;
|
||||||
import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository;
|
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.QuizCategory;
|
||||||
import com.mangkyu.employment.interview.enums.value.QuizLevel;
|
import com.mangkyu.employment.interview.enums.value.QuizLevel;
|
||||||
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
|
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
|
||||||
@@ -31,7 +30,6 @@ public class GetQuizService {
|
|||||||
private final QuizRepository quizRepository;
|
private final QuizRepository quizRepository;
|
||||||
private final SolvedQuizRepository solvedQuizRepository;
|
private final SolvedQuizRepository solvedQuizRepository;
|
||||||
private final ModelMapper modelMapper;
|
private final ModelMapper modelMapper;
|
||||||
private final EnumMapperFactory enumMapperFactory;
|
|
||||||
|
|
||||||
public Quiz getQuiz(final String resourceId) {
|
public Quiz getQuiz(final String resourceId) {
|
||||||
return quizRepository.findByResourceId(resourceId)
|
return quizRepository.findByResourceId(resourceId)
|
||||||
@@ -49,20 +47,15 @@ public class GetQuizService {
|
|||||||
|
|
||||||
// TODO: do not use GetQuizResponseHolder in service layer
|
// 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 PageRequest pageRequest = PageRequest.of(getQuizRequest.getPage(), getQuizRequest.getSize());
|
||||||
final Page<Quiz> quizPage = quizRepository.findByQuizCategoryIsAndIsEnableTrue(getQuizRequest.getCategory(), pageRequest);
|
final Page<Quiz> quizPage = quizRepository.findByQuizCategoryIsAndIsEnableTrue(getQuizRequest.getCategory(), pageRequest);
|
||||||
|
|
||||||
final List<GetQuizResponse> quizResponseList = quizPage.getContent().stream()
|
return PagingQuizzes.builder()
|
||||||
.map(QuizDtoConverter::convert)
|
.quizzes(new Quizzes(quizPage.getContent()))
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
return GetQuizResponseHolder.builder()
|
|
||||||
.quizList(quizResponseList)
|
|
||||||
.category(enumMapperFactory.getElement(EnumMapperKey.QUIZ_CATEGORY, getQuizRequest.getCategory()))
|
|
||||||
.hasNext(quizPage.hasNext())
|
.hasNext(quizPage.hasNext())
|
||||||
.page(quizPage.nextOrLastPageable().getPageNumber())
|
.pageNumber(quizPage.nextOrLastPageable().getPageNumber())
|
||||||
.size(quizPage.nextOrLastPageable().getPageSize())
|
.pageSize(quizPage.nextOrLastPageable().getPageSize())
|
||||||
.totalPages(quizPage.getTotalPages())
|
.totalPages(quizPage.getTotalPages())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
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.Quiz;
|
||||||
|
import com.mangkyu.employment.interview.app.quiz.entity.Quizzes;
|
||||||
import com.mangkyu.employment.interview.app.quiz.service.GetQuizService;
|
import com.mangkyu.employment.interview.app.quiz.service.GetQuizService;
|
||||||
import com.mangkyu.employment.interview.enums.common.EnumMapperKey;
|
import com.mangkyu.employment.interview.enums.common.EnumMapperKey;
|
||||||
import com.mangkyu.employment.interview.enums.common.EnumMapperType;
|
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.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import static com.mangkyu.employment.interview.app.quiz.constants.QuizConstants.*;
|
import static com.mangkyu.employment.interview.app.quiz.constants.QuizConstants.*;
|
||||||
@@ -106,24 +109,20 @@ class GetQuizControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
void getQuizList() throws Exception {
|
void getQuizList() throws Exception {
|
||||||
// given
|
// given
|
||||||
final GetQuizResponse quizResponse = GetQuizResponse.builder()
|
final Quiz quiz = EntityCreationUtils.quiz();
|
||||||
.title("quiz")
|
|
||||||
.quizLevelList(Arrays.asList(QuizLevel.JUNIOR.name(), QuizLevel.SENIOR.name()))
|
|
||||||
.category(enumMapperValue(QuizCategory.JAVA).getTitle())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
final Pageable pageable = PageRequest.of(MIN_PAGE_NUMBER, MIN_PAGE_SIZE);
|
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()
|
final PagingQuizzes quizzes = PagingQuizzes.builder()
|
||||||
.quizList(Collections.singletonList(quizResponse))
|
.quizzes(new Quizzes(List.of(quiz)))
|
||||||
.hasNext(quizPage.hasNext())
|
.hasNext(quizPage.hasNext())
|
||||||
.page(quizPage.nextOrLastPageable().getPageNumber())
|
.pageNumber(quizPage.nextOrLastPageable().getPageNumber())
|
||||||
.size(quizPage.nextOrLastPageable().getPageSize())
|
.pageSize(quizPage.nextOrLastPageable().getPageSize())
|
||||||
.totalPages(quizPage.getTotalPages())
|
.totalPages(quizPage.getTotalPages())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
doReturn(getQuizResponseHolder)
|
doReturn(quizzes)
|
||||||
.when(quizService)
|
.when(quizService)
|
||||||
.getQuizList(any(GetQuizRequest.class));
|
.getQuizList(any(GetQuizRequest.class));
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.mangkyu.employment.interview.app.quiz.service;
|
package com.mangkyu.employment.interview.app.quiz.service;
|
||||||
|
|
||||||
import com.mangkyu.employment.interview.app.quiz.controller.*;
|
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.entity.Quizzes;
|
||||||
import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository;
|
import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository;
|
||||||
import com.mangkyu.employment.interview.app.solvedquiz.entity.SolvedQuiz;
|
import com.mangkyu.employment.interview.app.solvedquiz.entity.SolvedQuiz;
|
||||||
@@ -135,12 +136,12 @@ class GetQuizServiceTest {
|
|||||||
.findByQuizCategoryIsAndIsEnableTrue(any(QuizCategory.class), any(PageRequest.class));
|
.findByQuizCategoryIsAndIsEnableTrue(any(QuizCategory.class), any(PageRequest.class));
|
||||||
|
|
||||||
// when
|
// when
|
||||||
final GetQuizResponseHolder result = quizService.getQuizList(request);
|
PagingQuizzes result = quizService.getQuizList(request);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertThat(result.isHasNext()).isFalse();
|
assertThat(result.isHasNext()).isFalse();
|
||||||
assertThat(result.getPage()).isEqualTo(page);
|
assertThat(result.getPageNumber()).isEqualTo(page);
|
||||||
assertThat(result.getSize()).isEqualTo(size);
|
assertThat(result.getPageSize()).isEqualTo(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user