From a40298c30d08188503813398834aa9bac0daa477 Mon Sep 17 00:00:00 2001 From: MangKyu Date: Sat, 18 Feb 2023 19:02:44 +0900 Subject: [PATCH] Move domain logic to Entity --- .../interview/app/answer/entity/Answer.java | 6 ++- .../answer/service/DeleteAnswerService.java | 2 +- .../interview/app/member/entity/Member.java | 5 +- .../member/service/UpdateMemberService.java | 21 --------- .../interview/cron/SendQuizCronJob.java | 4 +- .../app/answer/entity/AnswerTest.java | 31 ++++++++++++ .../app/member/entity/MemberTest.java | 24 ++++++++++ .../service/UpdateMemberServiceTest.java | 47 ------------------- .../interview/cron/SendQuizCronJobTest.java | 7 --- 9 files changed, 66 insertions(+), 81 deletions(-) delete mode 100644 src/main/java/com/mangkyu/employment/interview/app/member/service/UpdateMemberService.java create mode 100644 src/test/java/com/mangkyu/employment/interview/app/answer/entity/AnswerTest.java create mode 100644 src/test/java/com/mangkyu/employment/interview/app/member/entity/MemberTest.java delete mode 100644 src/test/java/com/mangkyu/employment/interview/app/member/service/UpdateMemberServiceTest.java diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/entity/Answer.java b/src/main/java/com/mangkyu/employment/interview/app/answer/entity/Answer.java index 6e746ed..cfc79a2 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/entity/Answer.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/entity/Answer.java @@ -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); + } + } \ No newline at end of file diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/service/DeleteAnswerService.java b/src/main/java/com/mangkyu/employment/interview/app/answer/service/DeleteAnswerService.java index 36b987b..78be373 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/service/DeleteAnswerService.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/service/DeleteAnswerService.java @@ -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); } } \ No newline at end of file diff --git a/src/main/java/com/mangkyu/employment/interview/app/member/entity/Member.java b/src/main/java/com/mangkyu/employment/interview/app/member/entity/Member.java index 38e7443..37a8fa2 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/member/entity/Member.java +++ b/src/main/java/com/mangkyu/employment/interview/app/member/entity/Member.java @@ -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 solvedQuizList = new ArrayList<>(); + public void disableUser() { + setIsEnable(false); + } } diff --git a/src/main/java/com/mangkyu/employment/interview/app/member/service/UpdateMemberService.java b/src/main/java/com/mangkyu/employment/interview/app/member/service/UpdateMemberService.java deleted file mode 100644 index 208c4cb..0000000 --- a/src/main/java/com/mangkyu/employment/interview/app/member/service/UpdateMemberService.java +++ /dev/null @@ -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); - } - -} diff --git a/src/main/java/com/mangkyu/employment/interview/cron/SendQuizCronJob.java b/src/main/java/com/mangkyu/employment/interview/cron/SendQuizCronJob.java index ed920df..8fc055c 100644 --- a/src/main/java/com/mangkyu/employment/interview/cron/SendQuizCronJob.java +++ b/src/main/java/com/mangkyu/employment/interview/cron/SendQuizCronJob.java @@ -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 randomQuizList = quizService.getRandomQuizListUnderLimit(unsolvedQuizList, member.getQuizSize()); if (isLastMail) { - updateMemberService.disableUser(member); + member.disableUser(); } mailService.sendMail(member.getEmail(), randomQuizList, isLastMail); diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/entity/AnswerTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/entity/AnswerTest.java new file mode 100644 index 0000000..7052066 --- /dev/null +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/entity/AnswerTest.java @@ -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(); + } + +} \ No newline at end of file diff --git a/src/test/java/com/mangkyu/employment/interview/app/member/entity/MemberTest.java b/src/test/java/com/mangkyu/employment/interview/app/member/entity/MemberTest.java new file mode 100644 index 0000000..4d1a277 --- /dev/null +++ b/src/test/java/com/mangkyu/employment/interview/app/member/entity/MemberTest.java @@ -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(); + } + +} \ No newline at end of file diff --git a/src/test/java/com/mangkyu/employment/interview/app/member/service/UpdateMemberServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/member/service/UpdateMemberServiceTest.java deleted file mode 100644 index ef125af..0000000 --- a/src/test/java/com/mangkyu/employment/interview/app/member/service/UpdateMemberServiceTest.java +++ /dev/null @@ -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; - } - -} \ No newline at end of file diff --git a/src/test/java/com/mangkyu/employment/interview/cron/SendQuizCronJobTest.java b/src/test/java/com/mangkyu/employment/interview/cron/SendQuizCronJobTest.java index a4a856e..b3cdc80 100644 --- a/src/test/java/com/mangkyu/employment/interview/cron/SendQuizCronJobTest.java +++ b/src/test/java/com/mangkyu/employment/interview/cron/SendQuizCronJobTest.java @@ -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); }