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.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) {

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

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

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.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)