Add Quizzes and refactoring

This commit is contained in:
MangKyu
2023-02-18 20:26:27 +09:00
parent 63087fc707
commit e139ae27a3
6 changed files with 87 additions and 15 deletions

View File

@@ -0,0 +1,30 @@
/*
*
* Quizzies.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;
import java.util.List;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Quizzes {
private List<Quiz> quizList;
public boolean isLastMail(final Integer quizSize) {
return quizList.size() <= quizSize;
}
}

View File

@@ -3,6 +3,7 @@ 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.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;
@@ -63,13 +64,13 @@ public class QuizService {
.build();
}
public List<Quiz> getUnsolvedQuizList(final Long userId, final QuizLevel quizLevel, final Set<QuizCategory> quizCategorySet) {
public Quizzes getUnsolvedQuizList(final Long userId, final QuizLevel quizLevel, final Set<QuizCategory> quizCategorySet) {
final Set<Long> solvedQuizIdList = solvedQuizRepository.findAllByMember_Id(userId)
.stream()
.map(v -> v.getQuiz().getId())
.collect(Collectors.toSet());
return quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel);
return new Quizzes(quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel));
}
public List<Quiz> getRandomQuizListUnderLimit(final List<Quiz> quizList, final Integer quizSize) {

View File

@@ -3,6 +3,7 @@ package com.mangkyu.employment.interview.cron;
import com.mangkyu.employment.interview.app.mail.service.MailService;
import com.mangkyu.employment.interview.app.member.entity.Member;
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.QuizService;
import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService;
import com.mangkyu.employment.interview.app.member.service.GetMemberService;
@@ -45,10 +46,10 @@ public class SendQuizCronJob {
}
private void sendUnsolvedQuizForUser(final Member member) {
final List<Quiz> unsolvedQuizList = quizService.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
final boolean isLastMail = isLastMail(unsolvedQuizList, member.getQuizSize());
final Quizzes unsolvedQuizList = quizService.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
final boolean isLastMail = unsolvedQuizList.isLastMail(member.getQuizSize());
final List<Quiz> randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
final List<Quiz> randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList.getQuizList(), member.getQuizSize());
if (isLastMail) {
member.disableUser();
}
@@ -57,8 +58,4 @@ public class SendQuizCronJob {
solvedQuizService.addSolvedQuizList(member, randomQuizList);
}
private boolean isLastMail(final List<Quiz> quizList, final Integer quizSize) {
return quizList.size() <= quizSize;
}
}

View File

@@ -0,0 +1,42 @@
package com.mangkyu.employment.interview.app.quiz.entity;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
class QuizzesTest {
@Test
void 마지막메일_True(){
// given
Quizzes quizzes = quizzes();
// when
boolean result = quizzes.isLastMail(3);
// then
assertThat(result).isTrue();
}
@Test
void 마지막메일_False(){
// given
Quizzes quizzes = quizzes();
// when
boolean result = quizzes.isLastMail(1);
// then
assertThat(result).isFalse();
}
private Quizzes quizzes() {
return new Quizzes(List.of(new Quiz(), new Quiz()));
}
}

View File

@@ -2,6 +2,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.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.entity.SolvedQuiz;
import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository;
@@ -188,10 +189,10 @@ class QuizServiceTest {
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel);
// when
final List<Quiz> result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
final Quizzes quizzes = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
// then
assertThat(result.size()).isEqualTo(unsolvedQuizList.size());
assertThat(quizzes.getQuizList().size()).isEqualTo(unsolvedQuizList.size());
}
@Test
@@ -209,10 +210,10 @@ class QuizServiceTest {
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), quizCategorySet, quizLevel);
// when
final List<Quiz> result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
final Quizzes result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
// then
assertThat(result.size()).isEqualTo(unsolvedQuizList.size());
assertThat(result.getQuizList().size()).isEqualTo(unsolvedQuizList.size());
}
@Test

View File

@@ -3,6 +3,7 @@ package com.mangkyu.employment.interview.cron;
import com.mangkyu.employment.interview.app.mail.service.MailService;
import com.mangkyu.employment.interview.app.member.entity.Member;
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.QuizService;
import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService;
import com.mangkyu.employment.interview.app.member.service.GetMemberService;
@@ -81,7 +82,7 @@ class SendQuizCronJobTest {
doReturn(memberList)
.when(memberService)
.getEnabledUserList(quizDay);
doReturn(unsolvedQuizList)
doReturn(new Quizzes(unsolvedQuizList))
.when(quizService)
.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
doReturn(randomQuizList)
@@ -109,7 +110,7 @@ class SendQuizCronJobTest {
doReturn(memberList)
.when(memberService)
.getEnabledUserList(quizDay);
doReturn(unsolvedQuizList)
doReturn(new Quizzes(unsolvedQuizList))
.when(quizService)
.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
doReturn(randomQuizList)