From 5d817cb7dcc509edba1dbd67c8209ee8b5a7d7a2 Mon Sep 17 00:00:00 2001 From: HyungHoKim00 Date: Fri, 23 Aug 2024 10:44:33 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=A7=80=EC=9B=90=20=EC=8B=9C=EC=9E=91?= =?UTF-8?q?=20=EC=9D=B4=ED=9B=84=EC=97=90=EB=8A=94=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EA=B3=B5=EA=B3=A0=EC=9D=98=20=EC=A7=88=EB=AC=B8=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=A0=20=EC=88=98=20=EC=97=86=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cruru/applyform/domain/ApplyForm.java | 5 ++++ .../QuestionUnmodifiableException.java | 13 +++++++++ .../service/facade/QuestionFacade.java | 8 +++++ .../controller/QuestionControllerTest.java | 9 +----- .../service/facade/QuestionFacadeTest.java | 29 ++++++++++++++++++- .../cruru/util/fixture/ApplyFormFixture.java | 13 ++++++++- 6 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 backend/src/main/java/com/cruru/question/exception/QuestionUnmodifiableException.java diff --git a/backend/src/main/java/com/cruru/applyform/domain/ApplyForm.java b/backend/src/main/java/com/cruru/applyform/domain/ApplyForm.java index 6842f8838..f6c77f96f 100644 --- a/backend/src/main/java/com/cruru/applyform/domain/ApplyForm.java +++ b/backend/src/main/java/com/cruru/applyform/domain/ApplyForm.java @@ -10,6 +10,7 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.OneToOne; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Objects; import lombok.AccessLevel; @@ -89,6 +90,10 @@ public ApplyForm( this.dashboard = dashboard; } + public boolean hasStarted() { + return !startDate.toLocalDate().isAfter(LocalDate.now()); + } + @Override public boolean equals(Object o) { if (this == o) { diff --git a/backend/src/main/java/com/cruru/question/exception/QuestionUnmodifiableException.java b/backend/src/main/java/com/cruru/question/exception/QuestionUnmodifiableException.java new file mode 100644 index 000000000..4ea73f2d9 --- /dev/null +++ b/backend/src/main/java/com/cruru/question/exception/QuestionUnmodifiableException.java @@ -0,0 +1,13 @@ +package com.cruru.question.exception; + +import com.cruru.advice.badrequest.BadRequestException; + +public class QuestionUnmodifiableException extends BadRequestException { + + private static final String MESSAGE = "진행중인 모집 공고는 질문을 수정할 수 없습니다."; + + public QuestionUnmodifiableException() { + super(MESSAGE); + } + +} diff --git a/backend/src/main/java/com/cruru/question/service/facade/QuestionFacade.java b/backend/src/main/java/com/cruru/question/service/facade/QuestionFacade.java index 636a828d6..504312cb8 100644 --- a/backend/src/main/java/com/cruru/question/service/facade/QuestionFacade.java +++ b/backend/src/main/java/com/cruru/question/service/facade/QuestionFacade.java @@ -4,6 +4,7 @@ import com.cruru.applyform.service.ApplyFormService; import com.cruru.question.controller.dto.QuestionCreateRequest; import com.cruru.question.controller.dto.QuestionUpdateRequests; +import com.cruru.question.exception.QuestionUnmodifiableException; import com.cruru.question.service.QuestionService; import java.util.List; import lombok.RequiredArgsConstructor; @@ -21,9 +22,16 @@ public class QuestionFacade { @Transactional public void update(QuestionUpdateRequests request, long applyFormId) { ApplyForm applyForm = applyFormService.findById(applyFormId); + validateRecruitmentStarted(applyForm); questionService.deleteAllByApplyForm(applyForm); List newQuestions = request.questions(); newQuestions.forEach(question -> questionService.create(question, applyForm)); } + + private void validateRecruitmentStarted(ApplyForm applyForm) { + if (applyForm.hasStarted()) { + throw new QuestionUnmodifiableException(); + } + } } diff --git a/backend/src/test/java/com/cruru/question/controller/QuestionControllerTest.java b/backend/src/test/java/com/cruru/question/controller/QuestionControllerTest.java index ac4ed62c8..f959441bf 100644 --- a/backend/src/test/java/com/cruru/question/controller/QuestionControllerTest.java +++ b/backend/src/test/java/com/cruru/question/controller/QuestionControllerTest.java @@ -2,15 +2,12 @@ import com.cruru.applyform.domain.ApplyForm; import com.cruru.applyform.domain.repository.ApplyFormRepository; -import com.cruru.dashboard.domain.Dashboard; -import com.cruru.dashboard.domain.repository.DashboardRepository; import com.cruru.question.controller.dto.QuestionCreateRequest; import com.cruru.question.controller.dto.QuestionUpdateRequests; import com.cruru.question.domain.QuestionType; import com.cruru.question.domain.repository.QuestionRepository; import com.cruru.util.ControllerTest; import com.cruru.util.fixture.ApplyFormFixture; -import com.cruru.util.fixture.DashboardFixture; import com.cruru.util.fixture.QuestionFixture; import io.restassured.RestAssured; import io.restassured.http.ContentType; @@ -22,9 +19,6 @@ @DisplayName("질문 컨트롤러 테스트") class QuestionControllerTest extends ControllerTest { - @Autowired - private DashboardRepository dashboardRepository; - @Autowired private QuestionRepository questionRepository; @@ -35,8 +29,7 @@ class QuestionControllerTest extends ControllerTest { @Test void update() { // given - Dashboard dashboard = dashboardRepository.save(DashboardFixture.backend(defaultClub)); - ApplyForm applyForm = applyFormRepository.save(ApplyFormFixture.backend(dashboard)); + ApplyForm applyForm = applyFormRepository.save(ApplyFormFixture.notStarted()); questionRepository.save(QuestionFixture.shortAnswerType(applyForm)); QuestionUpdateRequests questionUpdateRequests = new QuestionUpdateRequests(List.of( new QuestionCreateRequest(QuestionType.LONG_ANSWER.name(), "new", List.of(), 0, true) diff --git a/backend/src/test/java/com/cruru/question/service/facade/QuestionFacadeTest.java b/backend/src/test/java/com/cruru/question/service/facade/QuestionFacadeTest.java index ac5d08c62..63adec70e 100644 --- a/backend/src/test/java/com/cruru/question/service/facade/QuestionFacadeTest.java +++ b/backend/src/test/java/com/cruru/question/service/facade/QuestionFacadeTest.java @@ -1,6 +1,7 @@ package com.cruru.question.service.facade; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertAll; import com.cruru.applyform.domain.ApplyForm; @@ -12,6 +13,7 @@ import com.cruru.question.controller.dto.QuestionUpdateRequests; import com.cruru.question.domain.Question; import com.cruru.question.domain.repository.QuestionRepository; +import com.cruru.question.exception.QuestionUnmodifiableException; import com.cruru.util.ServiceTest; import com.cruru.util.fixture.ApplyFormFixture; import com.cruru.util.fixture.ChoiceFixture; @@ -40,7 +42,7 @@ class QuestionFacadeTest extends ServiceTest { @Test void update() { // given - ApplyForm applyForm = applyFormRepository.save(ApplyFormFixture.backend()); + ApplyForm applyForm = applyFormRepository.save(ApplyFormFixture.notStarted()); Question question = questionRepository.save(QuestionFixture.multipleChoiceType(applyForm)); choiceRepository.save(ChoiceFixture.first(question)); choiceRepository.save(ChoiceFixture.second(question)); @@ -80,4 +82,29 @@ void update() { () -> assertThat(actualChoice.getSequence()).isEqualTo(newChoice.getSequence()) ); } + + @DisplayName("모집 공고가 시작된 이후이면 질문을 수정할 수 없다..") + @Test + void update_ApplyFormInProgress() { + // given + ApplyForm applyForm = applyFormRepository.save(ApplyFormFixture.backend()); + Question question = questionRepository.save(QuestionFixture.multipleChoiceType(applyForm)); + choiceRepository.save(ChoiceFixture.first(question)); + choiceRepository.save(ChoiceFixture.second(question)); + + Question newQuestion = QuestionFixture.shortAnswerType(applyForm); + + QuestionUpdateRequests questionUpdateRequest = new QuestionUpdateRequests(List.of( + new QuestionCreateRequest( + newQuestion.getQuestionType().name(), + newQuestion.getContent(), + List.of(), + newQuestion.getSequence(), + newQuestion.isRequired() + ))); + + // when&then + assertThatThrownBy(() -> questionFacade.update(questionUpdateRequest, applyForm.getId())) + .isInstanceOf(QuestionUnmodifiableException.class); + } } diff --git a/backend/src/test/java/com/cruru/util/fixture/ApplyFormFixture.java b/backend/src/test/java/com/cruru/util/fixture/ApplyFormFixture.java index 9b33043bc..abc65ce15 100644 --- a/backend/src/test/java/com/cruru/util/fixture/ApplyFormFixture.java +++ b/backend/src/test/java/com/cruru/util/fixture/ApplyFormFixture.java @@ -22,7 +22,7 @@ public static ApplyForm backend() { "크루루 백엔드 모집 공고", "# 모집공고 설명1 ## 이렇게 지원하세요", "www.cruru.kr/post/" + 1, - LocalDateTime.of(2099, 11, 30, 23, 59, 59), + LocalDateTime.of(2000, 11, 30, 23, 59, 59), LocalDateTime.of(2099, 12, 31, 23, 59, 59), null ); @@ -38,4 +38,15 @@ public static ApplyForm frontend(Dashboard frontendDashboard) { frontendDashboard ); } + + public static ApplyForm notStarted() { + return new ApplyForm( + "크루루 프론트엔드 모집 공고", + "# 모집공고 설명2 ## 이렇게 지원하세요", + "www.cruru.kr/post/" + 1, + LocalDateTime.of(2099, 12, 11, 23, 59, 59), + LocalDateTime.of(2099, 12, 21, 23, 59, 59), + null + ); + } }