modify selectQuizList With Level

This commit is contained in:
MangKyu
2021-12-08 23:13:01 +09:00
parent 487aa5755d
commit 33b04d1234
4 changed files with 60 additions and 14 deletions

View File

@@ -1,6 +1,7 @@
package com.mangkyu.employment.interview.app.quiz.repository;
import com.mangkyu.employment.interview.app.quiz.entity.QuizEntity;
import com.mangkyu.employment.interview.app.quiz.enums.QuizLevel;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
@@ -8,6 +9,8 @@ import java.util.Set;
public interface QuizRepository extends JpaRepository <QuizEntity, Long> {
List<QuizEntity> findByIdNotIn(Set<Long> quizIdList);
List<QuizEntity> findByIdNotInAndQuizLevel(final Set<Long> quizIdList, final QuizLevel quizLevel);
List<QuizEntity> findByQuizLevel(final QuizLevel quizLevel);
}

View File

@@ -2,6 +2,7 @@ package com.mangkyu.employment.interview.app.quiz.service;
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequest;
import com.mangkyu.employment.interview.app.quiz.entity.QuizEntity;
import com.mangkyu.employment.interview.app.quiz.enums.QuizLevel;
import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository;
import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository;
import lombok.RequiredArgsConstructor;
@@ -25,15 +26,15 @@ public class QuizService {
quizRepository.save(quizEntity);
}
public List<QuizEntity> getUnsolvedQuizList(final Long userId) {
public List<QuizEntity> getUnsolvedQuizList(final Long userId, final QuizLevel quizLevel) {
final Set<Long> solvedQuizIdList = solvedQuizRepository.findAllByUser_Id(userId)
.stream()
.map(v -> v.getQuiz().getId())
.collect(Collectors.toSet());
return solvedQuizIdList.isEmpty()
? quizRepository.findAll()
: quizRepository.findByIdNotIn(solvedQuizIdList);
? quizRepository.findByQuizLevel(quizLevel)
: quizRepository.findByIdNotInAndQuizLevel(solvedQuizIdList, quizLevel);
}
}

View File

@@ -37,28 +37,69 @@ class QuizRepositoryTest {
}
@Test
public void selectQuizNotIn() {
public void selectQuizNotInAndLevel() {
// given
final QuizEntity quiz1 = QuizEntity.builder()
.title("quiz")
.title("quiz1")
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
final QuizEntity quiz2 = QuizEntity.builder()
.title("quiz")
.title("quiz2")
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
final QuizEntity quiz3 = QuizEntity.builder()
.title("quiz")
.title("quiz3")
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
final QuizEntity quiz4 = QuizEntity.builder()
.title("quiz4")
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
final QuizEntity savedQuiz1 = quizRepository.save(quiz1);
final QuizEntity savedQuiz2 = quizRepository.save(quiz2);
final QuizEntity savedQuiz3 = quizRepository.save(quiz3);
final QuizEntity savedQuiz4 = quizRepository.save(quiz4);
System.out.println(savedQuiz1.getId());
System.out.println(savedQuiz2.getId());
System.out.println(savedQuiz3.getId());
System.out.println(savedQuiz4.getId());
// when
final List<QuizEntity> unsolvedQuizList = quizRepository.findByIdNotInAndQuizLevel(new HashSet<>(Arrays.asList(savedQuiz1.getId(), savedQuiz2.getId())), QuizLevel.NEW);
// then
assertThat(unsolvedQuizList.size()).isEqualTo(1);
}
@Test
public void selectQuizLevel() {
// given
final QuizEntity quiz1 = QuizEntity.builder()
.title("quiz1")
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
final QuizEntity quiz2 = QuizEntity.builder()
.title("quiz2")
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
final QuizEntity quiz3 = QuizEntity.builder()
.title("quiz3")
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.NEW, QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
final QuizEntity quiz4 = QuizEntity.builder()
.title("quiz4")
.quizCategory(QuizCategory.JAVA)
.quizLevel(Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR))
.build();
quizRepository.save(quiz1);
quizRepository.save(quiz2);
@@ -66,10 +107,10 @@ class QuizRepositoryTest {
quizRepository.save(quiz4);
// when
final List<QuizEntity> unsolvedQuizList = quizRepository.findByIdNotIn(new HashSet<>(Arrays.asList(1L, 2L)));
final List<QuizEntity> unsolvedQuizList = quizRepository.findByQuizLevel(QuizLevel.NEW);
// then
assertThat(unsolvedQuizList.size()).isEqualTo(2);
assertThat(unsolvedQuizList.size()).isEqualTo(3);
}
}

View File

@@ -42,6 +42,7 @@ class QuizServiceTest {
private ModelMapper modelMapper;
private final Long userId = -1L;
private final QuizLevel quizLevel = QuizLevel.NEW;
@BeforeEach
public void init() {
@@ -78,10 +79,10 @@ class QuizServiceTest {
final List<QuizEntity> unsolvedQuizEntityList = Collections.singletonList(quizEntity(4L));
doReturn(solvedQuizEntityList).when(solvedQuizRepository).findAllByUser_Id(userId);
doReturn(unsolvedQuizEntityList).when(quizRepository).findByIdNotIn(solvedQuizIdList);
doReturn(unsolvedQuizEntityList).when(quizRepository).findByIdNotInAndQuizLevel(solvedQuizIdList, quizLevel);
// when
final List<QuizEntity> result = quizService.getUnsolvedQuizList(userId);
final List<QuizEntity> result = quizService.getUnsolvedQuizList(userId, quizLevel);
// then
assertThat(result.size()).isEqualTo(unsolvedQuizEntityList.size());
@@ -94,10 +95,10 @@ class QuizServiceTest {
final List<QuizEntity> unsolvedQuizEntityList = Collections.singletonList(quizEntity(4L));
doReturn(solvedQuizEntityList).when(solvedQuizRepository).findAllByUser_Id(userId);
doReturn(unsolvedQuizEntityList).when(quizRepository).findAll();
doReturn(unsolvedQuizEntityList).when(quizRepository).findByQuizLevel(quizLevel);
// when
final List<QuizEntity> result = quizService.getUnsolvedQuizList(userId);
final List<QuizEntity> result = quizService.getUnsolvedQuizList(userId, quizLevel);
// then
assertThat(result.size()).isEqualTo(unsolvedQuizEntityList.size());