Add Quizzes and refactoring
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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.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.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.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.common.EnumMapperKey;
|
||||||
@@ -63,13 +64,13 @@ public class QuizService {
|
|||||||
.build();
|
.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)
|
final Set<Long> solvedQuizIdList = solvedQuizRepository.findAllByMember_Id(userId)
|
||||||
.stream()
|
.stream()
|
||||||
.map(v -> v.getQuiz().getId())
|
.map(v -> v.getQuiz().getId())
|
||||||
.collect(Collectors.toSet());
|
.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) {
|
public List<Quiz> getRandomQuizListUnderLimit(final List<Quiz> quizList, final Integer quizSize) {
|
||||||
|
|||||||
@@ -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.mail.service.MailService;
|
||||||
import com.mangkyu.employment.interview.app.member.entity.Member;
|
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.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.quiz.service.QuizService;
|
||||||
import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService;
|
import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService;
|
||||||
import com.mangkyu.employment.interview.app.member.service.GetMemberService;
|
import com.mangkyu.employment.interview.app.member.service.GetMemberService;
|
||||||
@@ -45,10 +46,10 @@ public class SendQuizCronJob {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sendUnsolvedQuizForUser(final Member member) {
|
private void sendUnsolvedQuizForUser(final Member member) {
|
||||||
final List<Quiz> unsolvedQuizList = quizService.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
final Quizzes unsolvedQuizList = quizService.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
||||||
final boolean isLastMail = isLastMail(unsolvedQuizList, member.getQuizSize());
|
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) {
|
if (isLastMail) {
|
||||||
member.disableUser();
|
member.disableUser();
|
||||||
}
|
}
|
||||||
@@ -57,8 +58,4 @@ public class SendQuizCronJob {
|
|||||||
solvedQuizService.addSolvedQuizList(member, randomQuizList);
|
solvedQuizService.addSolvedQuizList(member, randomQuizList);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isLastMail(final List<Quiz> quizList, final Integer quizSize) {
|
|
||||||
return quizList.size() <= quizSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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.controller.*;
|
||||||
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.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;
|
||||||
import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository;
|
import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository;
|
||||||
@@ -188,10 +189,10 @@ class QuizServiceTest {
|
|||||||
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel);
|
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel);
|
||||||
|
|
||||||
// when
|
// when
|
||||||
final List<Quiz> result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
|
final Quizzes quizzes = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertThat(result.size()).isEqualTo(unsolvedQuizList.size());
|
assertThat(quizzes.getQuizList().size()).isEqualTo(unsolvedQuizList.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -209,10 +210,10 @@ class QuizServiceTest {
|
|||||||
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), quizCategorySet, quizLevel);
|
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), quizCategorySet, quizLevel);
|
||||||
|
|
||||||
// when
|
// when
|
||||||
final List<Quiz> result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
|
final Quizzes result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertThat(result.size()).isEqualTo(unsolvedQuizList.size());
|
assertThat(result.getQuizList().size()).isEqualTo(unsolvedQuizList.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -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.mail.service.MailService;
|
||||||
import com.mangkyu.employment.interview.app.member.entity.Member;
|
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.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.quiz.service.QuizService;
|
||||||
import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService;
|
import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService;
|
||||||
import com.mangkyu.employment.interview.app.member.service.GetMemberService;
|
import com.mangkyu.employment.interview.app.member.service.GetMemberService;
|
||||||
@@ -81,7 +82,7 @@ class SendQuizCronJobTest {
|
|||||||
doReturn(memberList)
|
doReturn(memberList)
|
||||||
.when(memberService)
|
.when(memberService)
|
||||||
.getEnabledUserList(quizDay);
|
.getEnabledUserList(quizDay);
|
||||||
doReturn(unsolvedQuizList)
|
doReturn(new Quizzes(unsolvedQuizList))
|
||||||
.when(quizService)
|
.when(quizService)
|
||||||
.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
||||||
doReturn(randomQuizList)
|
doReturn(randomQuizList)
|
||||||
@@ -109,7 +110,7 @@ class SendQuizCronJobTest {
|
|||||||
doReturn(memberList)
|
doReturn(memberList)
|
||||||
.when(memberService)
|
.when(memberService)
|
||||||
.getEnabledUserList(quizDay);
|
.getEnabledUserList(quizDay);
|
||||||
doReturn(unsolvedQuizList)
|
doReturn(new Quizzes(unsolvedQuizList))
|
||||||
.when(quizService)
|
.when(quizService)
|
||||||
.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
.getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
|
||||||
doReturn(randomQuizList)
|
doReturn(randomQuizList)
|
||||||
|
|||||||
Reference in New Issue
Block a user