Move domain logic to Entity

This commit is contained in:
MangKyu
2023-02-18 19:02:44 +09:00
parent f05bbfef9c
commit a40298c30d
9 changed files with 66 additions and 81 deletions

View File

@@ -10,7 +10,7 @@ import javax.persistence.*;
@Table(name = "answer")
@Getter
@Builder
@NoArgsConstructor(force = true)
@NoArgsConstructor
@AllArgsConstructor
public class Answer extends BaseEntity {
@@ -25,4 +25,8 @@ public class Answer extends BaseEntity {
@Column(length = 5000)
private String description;
public void clearAnswer() {
quiz.setAnswer(null);
}
}

View File

@@ -18,7 +18,7 @@ public class DeleteAnswerService {
public void delete(final String resourceId) {
final Answer answer = getAnswerService.get(resourceId);
answer.getQuiz().setAnswer(null);
answer.clearAnswer();
answerRepository.delete(answer);
}
}

View File

@@ -21,7 +21,7 @@ import static com.mangkyu.employment.interview.app.quiz.constants.QuizConstants.
@Table(name = "member")
@Getter
@Builder
@NoArgsConstructor(force = true)
@NoArgsConstructor
@AllArgsConstructor
public class Member extends BaseEntity {
@@ -51,4 +51,7 @@ public class Member extends BaseEntity {
@OneToMany(mappedBy = "member")
private List<SolvedQuiz> solvedQuizList = new ArrayList<>();
public void disableUser() {
setIsEnable(false);
}
}

View File

@@ -1,21 +0,0 @@
package com.mangkyu.employment.interview.app.member.service;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.member.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
@Transactional
public class UpdateMemberService {
private final MemberRepository memberRepository;
public void disableUser(final Member member) {
member.setIsEnable(false);
memberRepository.save(member);
}
}

View File

@@ -2,7 +2,6 @@ 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.member.service.UpdateMemberService;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService;
@@ -24,7 +23,6 @@ import java.util.List;
public class SendQuizCronJob {
private final GetMemberService memberService;
private final UpdateMemberService updateMemberService;
private final QuizService quizService;
private final MailService mailService;
private final SolvedQuizService solvedQuizService;
@@ -52,7 +50,7 @@ public class SendQuizCronJob {
final List<Quiz> randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
if (isLastMail) {
updateMemberService.disableUser(member);
member.disableUser();
}
mailService.sendMail(member.getEmail(), randomQuizList, isLastMail);

View File

@@ -0,0 +1,31 @@
package com.mangkyu.employment.interview.app.answer.entity;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.testutils.EntityCreationUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
class AnswerTest {
@Test
void answer초기화(){
// given
Quiz quiz = EntityCreationUtils.quiz();
quiz.setAnswer(new Answer());
Answer answer = Answer.builder()
.quiz(quiz)
.build();
// when
answer.clearAnswer();
// then
assertThat(answer.getQuiz().getAnswer()).isNull();
}
}

View File

@@ -0,0 +1,24 @@
package com.mangkyu.employment.interview.app.member.entity;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
class MemberTest {
@Test
void member비활성화() {
// given
Member member = Member.builder().build();
// when
member.disableUser();
// then
assertThat(member.getIsEnable()).isFalse();
}
}

View File

@@ -1,47 +0,0 @@
package com.mangkyu.employment.interview.app.member.service;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.member.repository.MemberRepository;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@ExtendWith(MockitoExtension.class)
class UpdateMemberServiceTest {
@InjectMocks
private UpdateMemberService target;
@Mock
private MemberRepository memberRepository;
@Test
void disableUserSuccess() {
// given
final Member member = user();
// when
target.disableUser(member);
// then
// verify
verify(memberRepository, times(1)).save(member);
}
private Member user() {
final Member member = Member.builder()
.email("minkyu@test.com")
.quizLevel(QuizLevel.JUNIOR)
.build();
member.setIsEnable(true);
return member;
}
}

View File

@@ -2,7 +2,6 @@ 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.member.service.UpdateMemberService;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import com.mangkyu.employment.interview.app.solvedquiz.service.SolvedQuizService;
@@ -31,9 +30,6 @@ class SendQuizCronJobTest {
@Mock
private GetMemberService memberService;
@Mock
private UpdateMemberService updateMemberService;
@Mock
private QuizService quizService;
@Mock
@@ -72,7 +68,6 @@ class SendQuizCronJobTest {
// verify
verify(quizService, times(0)).getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
verify(quizService, times(0)).getRandomQuizListUnderLimit(anyList(), anyInt());
verify(updateMemberService, times(0)).disableUser(member);
verify(mailService, times(0)).sendMail(anyString(), anyList(), anyBoolean());
verify(solvedQuizService, times(0)).addSolvedQuizList(any(Member.class), anyList());
}
@@ -101,7 +96,6 @@ class SendQuizCronJobTest {
// verify
verify(quizService, times(1)).getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
verify(updateMemberService, times(0)).disableUser(member);
verify(mailService, times(1)).sendMail(member.getEmail(), randomQuizList, false);
verify(solvedQuizService, times(1)).addSolvedQuizList(member, randomQuizList);
}
@@ -130,7 +124,6 @@ class SendQuizCronJobTest {
// verify
verify(quizService, times(1)).getUnsolvedQuizList(member.getId(), member.getQuizLevel(), member.getQuizCategorySet());
verify(quizService, times(1)).getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize());
verify(updateMemberService, times(1)).disableUser(member);
verify(mailService, times(1)).sendMail(member.getEmail(), randomQuizList, true);
verify(solvedQuizService, times(1)).addSolvedQuizList(member, randomQuizList);
}