From 6e05937090fda16b719126fa2ad9cc3046ad9344 Mon Sep 17 00:00:00 2001 From: HongGit Date: Tue, 25 Feb 2025 00:35:57 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[fix/#77]=20=20=EB=B0=9C=ED=96=89=20?= =?UTF-8?q?=EC=97=B0=EC=9B=94=EB=B3=84=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20?= =?UTF-8?q?day=20=ED=95=84=EB=93=9C=20date=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/PublishMonthGetResponse.java | 5 +++-- .../domain/publish/service/PublishServiceTest.java | 14 ++++---------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/moplus/moplus_server/domain/publish/dto/response/PublishMonthGetResponse.java b/src/main/java/com/moplus/moplus_server/domain/publish/dto/response/PublishMonthGetResponse.java index 8ca3189..8f86220 100644 --- a/src/main/java/com/moplus/moplus_server/domain/publish/dto/response/PublishMonthGetResponse.java +++ b/src/main/java/com/moplus/moplus_server/domain/publish/dto/response/PublishMonthGetResponse.java @@ -1,18 +1,19 @@ package com.moplus.moplus_server.domain.publish.dto.response; import com.moplus.moplus_server.domain.publish.domain.Publish; +import java.time.LocalDate; import lombok.Builder; @Builder public record PublishMonthGetResponse( Long publishId, - int day, + LocalDate date, PublishProblemSetResponse problemSetInfo ) { public static PublishMonthGetResponse of(Publish publish, PublishProblemSetResponse problemSetInfos) { return PublishMonthGetResponse.builder() .publishId(publish.getId()) - .day(publish.getPublishedDate().getDayOfMonth()) + .date(publish.getPublishedDate()) .problemSetInfo(problemSetInfos) .build(); } diff --git a/src/test/java/com/moplus/moplus_server/domain/publish/service/PublishServiceTest.java b/src/test/java/com/moplus/moplus_server/domain/publish/service/PublishServiceTest.java index 463bf7d..d6b2d14 100644 --- a/src/test/java/com/moplus/moplus_server/domain/publish/service/PublishServiceTest.java +++ b/src/test/java/com/moplus/moplus_server/domain/publish/service/PublishServiceTest.java @@ -80,23 +80,17 @@ void setUp() { void 월별_발행_조회_테스트() { // given publishSaveService.createPublish(new PublishPostRequest( - LocalDate.of(2025, 3, 10), - 1L - )); - - publishSaveService.createPublish(new PublishPostRequest( - LocalDate.of(2025, 3, 15), + LocalDate.now().plusDays(3), 1L )); // when - List publishList = publishGetService.getPublishMonth(2025, 3); + List publishList = publishGetService.getPublishMonth(LocalDate.now().plusDays(3).getYear(), LocalDate.now().plusDays(3).getMonthValue()); // then - assertThat(publishList).hasSize(2); - assertThat(publishList.get(0).day()).isEqualTo(10); + assertThat(publishList).hasSize(1); + assertThat(publishList.get(0).date()).isEqualTo(LocalDate.now().plusDays(3)); assertThat(publishList.get(0).problemSetInfo().title()).isEqualTo("2025년 5월 고2 모의고사 문제 세트"); - assertThat(publishList.get(1).day()).isEqualTo(15); } @Test From eea8ac86f51cc6a3de153e30e52d9c3c1165cd5c Mon Sep 17 00:00:00 2001 From: HongGit Date: Tue, 25 Feb 2025 00:42:07 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[fix/#77]=20=EB=8B=B9=EC=9D=BC=20=EB=B0=9C?= =?UTF-8?q?=ED=96=89=20=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moplus_server/domain/publish/domain/Publish.java | 2 +- .../domain/publish/service/PublishServiceTest.java | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/moplus/moplus_server/domain/publish/domain/Publish.java b/src/main/java/com/moplus/moplus_server/domain/publish/domain/Publish.java index 3ea566c..6c8c844 100644 --- a/src/main/java/com/moplus/moplus_server/domain/publish/domain/Publish.java +++ b/src/main/java/com/moplus/moplus_server/domain/publish/domain/Publish.java @@ -38,7 +38,7 @@ public Publish(LocalDate publishedDate, Long problemSetId) { public void validatePublishedDate() { // 발행 시점 다음날부터 발행 가능 - if (this.publishedDate.isBefore(LocalDate.now().plusDays(1))) { + if (this.publishedDate.isBefore(LocalDate.now())) { throw new InvalidValueException(ErrorCode.INVALID_DATE_ERROR); } } diff --git a/src/test/java/com/moplus/moplus_server/domain/publish/service/PublishServiceTest.java b/src/test/java/com/moplus/moplus_server/domain/publish/service/PublishServiceTest.java index d6b2d14..9393dfb 100644 --- a/src/test/java/com/moplus/moplus_server/domain/publish/service/PublishServiceTest.java +++ b/src/test/java/com/moplus/moplus_server/domain/publish/service/PublishServiceTest.java @@ -80,16 +80,16 @@ void setUp() { void 월별_발행_조회_테스트() { // given publishSaveService.createPublish(new PublishPostRequest( - LocalDate.now().plusDays(3), + LocalDate.now(), 1L )); // when - List publishList = publishGetService.getPublishMonth(LocalDate.now().plusDays(3).getYear(), LocalDate.now().plusDays(3).getMonthValue()); + List publishList = publishGetService.getPublishMonth(LocalDate.now().getYear(), LocalDate.now().getMonthValue()); // then assertThat(publishList).hasSize(1); - assertThat(publishList.get(0).date()).isEqualTo(LocalDate.now().plusDays(3)); + assertThat(publishList.get(0).date()).isEqualTo(LocalDate.now()); assertThat(publishList.get(0).problemSetInfo().title()).isEqualTo("2025년 5월 고2 모의고사 문제 세트"); } @@ -106,15 +106,12 @@ void setUp() { } @Test - void 오늘날짜_또는_과거날짜로_발행_시_예외_테스트() { + void 과거날짜로_발행_시_예외_테스트() { // given LocalDate today = LocalDate.now(); LocalDate pastDate = today.minusDays(1); // when & then (createPublish에서 예외 발생하도록) - assertThatThrownBy(() -> publishSaveService.createPublish(new PublishPostRequest(today, 1L))) - .isInstanceOf(InvalidValueException.class) - .hasMessageContaining(ErrorCode.INVALID_DATE_ERROR.getMessage()); assertThatThrownBy(() -> publishSaveService.createPublish(new PublishPostRequest(pastDate, 1L))) .isInstanceOf(InvalidValueException.class) From ef9d137f540d05c36e0cf7359381c1c96da404b7 Mon Sep 17 00:00:00 2001 From: HongGit Date: Tue, 25 Feb 2025 00:56:47 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[fix#77]=20=EC=82=AD=EC=A0=9C=EB=90=9C=20?= =?UTF-8?q?=EB=AC=B8=ED=95=AD=EC=84=B8=ED=8A=B8=20=EC=A1=B0=ED=9A=8C,?= =?UTF-8?q?=EA=B2=80=EC=83=89,=EC=88=98=EC=A0=95=20=EB=B6=88=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=98=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/ProblemSetSearchRepositoryCustom.java | 2 ++ .../domain/problemset/service/ProblemSetGetService.java | 6 +++++- .../problemset/service/ProblemSetUpdateService.java | 8 +++++++- .../moplus_server/global/error/exception/ErrorCode.java | 3 +++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/repository/ProblemSetSearchRepositoryCustom.java b/src/main/java/com/moplus/moplus_server/domain/problemset/repository/ProblemSetSearchRepositoryCustom.java index 8ebb041..7e8557a 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/repository/ProblemSetSearchRepositoryCustom.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/repository/ProblemSetSearchRepositoryCustom.java @@ -25,6 +25,7 @@ public List search(String problemSetTitle, String p .from(problemSet) .leftJoin(problem).on(problem.id.in(problemSet.problemIds)) // 문제 세트 내 포함된 문항과 조인 .where( + problemSet.isDeleted.isFalse(), containsProblemSetTitle(problemSetTitle), containsProblemTitle(problemTitle) ) @@ -50,6 +51,7 @@ public List confirmSearch(String problemSetTitle, S .from(problemSet) .leftJoin(problem).on(problem.id.in(problemSet.problemIds)) // 문제 세트 내 포함된 문항과 조인 .where( + problemSet.isDeleted.isFalse(), problemSet.confirmStatus.eq(CONFIRMED), containsProblemSetTitle(problemSetTitle), containsProblemTitle(problemTitle) diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java b/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java index 81553a0..441e9d8 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java @@ -11,6 +11,8 @@ import com.moplus.moplus_server.domain.problemset.repository.ProblemSetRepository; import com.moplus.moplus_server.domain.publish.domain.Publish; import com.moplus.moplus_server.domain.publish.repository.PublishRepository; +import com.moplus.moplus_server.global.error.exception.BusinessException; +import com.moplus.moplus_server.global.error.exception.ErrorCode; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -29,8 +31,10 @@ public class ProblemSetGetService { @Transactional(readOnly = true) public ProblemSetGetResponse getProblemSet(Long problemSetId) { - ProblemSet problemSet = problemSetRepository.findByIdElseThrow(problemSetId); + if (problemSet.isDeleted()) { + throw new BusinessException(ErrorCode.DELETE_PROBLEM_SET_GET_ERROR); + } List publishedDates = publishRepository.findByProblemSetId(problemSetId).stream() .map(Publish::getPublishedDate) .toList(); diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetUpdateService.java b/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetUpdateService.java index 5e01a9c..10c52c9 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetUpdateService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetUpdateService.java @@ -9,6 +9,7 @@ import com.moplus.moplus_server.domain.problemset.repository.ProblemSetRepository; import com.moplus.moplus_server.domain.publish.domain.Publish; import com.moplus.moplus_server.domain.publish.repository.PublishRepository; +import com.moplus.moplus_server.global.error.exception.BusinessException; import com.moplus.moplus_server.global.error.exception.ErrorCode; import com.moplus.moplus_server.global.error.exception.InvalidValueException; import java.util.ArrayList; @@ -35,7 +36,9 @@ public void reorderProblems(Long problemSetId, ProblemReorderRequest request) { @Transactional public void updateProblemSet(Long problemSetId, ProblemSetUpdateRequest request) { ProblemSet problemSet = problemSetRepository.findByIdElseThrow(problemSetId); - + if (problemSet.isDeleted()) { + throw new BusinessException(ErrorCode.DELETE_PROBLEM_SET_UPDATE_ERROR); + } // 빈 문항 유효성 검증 if (request.problemIds().isEmpty()) { throw new InvalidValueException(ErrorCode.EMPTY_PROBLEMS_ERROR); @@ -49,6 +52,9 @@ public void updateProblemSet(Long problemSetId, ProblemSetUpdateRequest request) @Transactional public ProblemSetConfirmStatus toggleConfirmProblemSet(Long problemSetId) { ProblemSet problemSet = problemSetRepository.findByIdElseThrow(problemSetId); + if (problemSet.isDeleted()) { + throw new BusinessException(ErrorCode.DELETE_PROBLEM_SET_TOGGLE_ERROR); + } List publishes = publishRepository.findByProblemSetId(problemSetId); if (!publishes.isEmpty()) { throw new InvalidValueException(ErrorCode.ALREADY_PUBLISHED_ERROR); diff --git a/src/main/java/com/moplus/moplus_server/global/error/exception/ErrorCode.java b/src/main/java/com/moplus/moplus_server/global/error/exception/ErrorCode.java index 91e42ac..777ba17 100644 --- a/src/main/java/com/moplus/moplus_server/global/error/exception/ErrorCode.java +++ b/src/main/java/com/moplus/moplus_server/global/error/exception/ErrorCode.java @@ -62,6 +62,9 @@ public enum ErrorCode { //문항세트 PROBLEM_SET_NOT_FOUND(HttpStatus.NOT_FOUND, "해당 문항세트를 찾을 수 없습니다"), EMPTY_PROBLEMS_ERROR(HttpStatus.BAD_REQUEST, "적어도 1개의 문항을 등록해주세요"), + DELETE_PROBLEM_SET_GET_ERROR(HttpStatus.BAD_REQUEST, "삭제된 세트 문항은 조회할 수 없습니다."), + DELETE_PROBLEM_SET_UPDATE_ERROR(HttpStatus.BAD_REQUEST, "삭제된 세트 문항은 수정할 수 없습니다."), + DELETE_PROBLEM_SET_TOGGLE_ERROR(HttpStatus.BAD_REQUEST, "삭제된 세트 문항은 컨펌을 토글할 수 없습니다."), // 발행 INVALID_MONTH_ERROR(HttpStatus.BAD_REQUEST, "유효하지 않은 월입니다."), From 90d469076d8bed773f3bcd610508819d9426b427 Mon Sep 17 00:00:00 2001 From: HongGit Date: Tue, 25 Feb 2025 01:23:46 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[fix/#77]=20=EB=B9=88=20=EB=AC=B8=ED=95=AD?= =?UTF-8?q?=EC=84=B8=ED=8A=B8=20=EC=BB=A8=ED=8E=8C=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moplus_server/domain/problemset/domain/ProblemSet.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java b/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java index 077be3f..0115a3f 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java @@ -74,6 +74,9 @@ public void deleteProblemSet() { public void toggleConfirm(List problems) { if (this.confirmStatus == ProblemSetConfirmStatus.NOT_CONFIRMED) { + if (problems.isEmpty()) { + throw new InvalidValueException(ErrorCode.EMPTY_PROBLEMS_ERROR); + } List invalidProblemIds = problems.stream() .filter(problem -> !problem.isValid()) .map(Problem::getProblemCustomId) From 31c22e6dae6841667785d3b3b0eeaa5b4b207ec5 Mon Sep 17 00:00:00 2001 From: HongGit Date: Tue, 25 Feb 2025 02:17:29 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[fix/#77]=20=EB=AC=B8=ED=95=AD=EC=84=B8?= =?UTF-8?q?=ED=8A=B8=20=EC=BB=A8=ED=8E=8C=20=EC=8B=A4=ED=8C=A8=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20=EC=97=90=EB=9F=AC=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/problemset/domain/ProblemSet.java | 3 ++- .../moplus_server/global/error/ErrorResponse.java | 8 ++++++++ .../global/error/GlobalExceptionHandler.java | 11 +++++++++++ .../error/exception/ProblemSetToggleException.java | 7 +++++++ .../domain/problemset/ProblemSetServiceTest.java | 3 ++- 5 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/moplus/moplus_server/global/error/exception/ProblemSetToggleException.java diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java b/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java index 0115a3f..012583f 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/domain/ProblemSet.java @@ -4,6 +4,7 @@ import com.moplus.moplus_server.global.common.BaseEntity; import com.moplus.moplus_server.global.error.exception.ErrorCode; import com.moplus.moplus_server.global.error.exception.InvalidValueException; +import com.moplus.moplus_server.global.error.exception.ProblemSetToggleException; import jakarta.persistence.CollectionTable; import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; @@ -84,7 +85,7 @@ public void toggleConfirm(List problems) { if (!invalidProblemIds.isEmpty()) { String message = ErrorCode.INVALID_CONFIRM_PROBLEM.getMessage() + String.join("번 ", invalidProblemIds) + "번"; - throw new InvalidValueException(message, ErrorCode.INVALID_CONFIRM_PROBLEM); + throw new ProblemSetToggleException(message); } } this.confirmStatus = this.confirmStatus.toggle(); diff --git a/src/main/java/com/moplus/moplus_server/global/error/ErrorResponse.java b/src/main/java/com/moplus/moplus_server/global/error/ErrorResponse.java index 76bae16..e5f46d5 100644 --- a/src/main/java/com/moplus/moplus_server/global/error/ErrorResponse.java +++ b/src/main/java/com/moplus/moplus_server/global/error/ErrorResponse.java @@ -20,8 +20,16 @@ private ErrorResponse(final ErrorCode code) { this.status = code.getStatus(); } + private ErrorResponse(final String message, final HttpStatus status) { + this.message = message; + this.status = status; + } + public static ErrorResponse from(final ErrorCode code) { return new ErrorResponse(code); } + public static ErrorResponse from(final String message, final HttpStatus status) { + return new ErrorResponse(message, status); + } } diff --git a/src/main/java/com/moplus/moplus_server/global/error/GlobalExceptionHandler.java b/src/main/java/com/moplus/moplus_server/global/error/GlobalExceptionHandler.java index 2e97cd6..67f40bd 100644 --- a/src/main/java/com/moplus/moplus_server/global/error/GlobalExceptionHandler.java +++ b/src/main/java/com/moplus/moplus_server/global/error/GlobalExceptionHandler.java @@ -2,7 +2,9 @@ import com.moplus.moplus_server.global.error.exception.BusinessException; import com.moplus.moplus_server.global.error.exception.ErrorCode; +import com.moplus.moplus_server.global.error.exception.InvalidValueException; import com.moplus.moplus_server.global.error.exception.NotFoundException; +import com.moplus.moplus_server.global.error.exception.ProblemSetToggleException; import com.moplus.moplus_server.global.security.exception.JwtInvalidException; import java.util.List; import lombok.extern.slf4j.Slf4j; @@ -78,4 +80,13 @@ protected ResponseEntity handleJwtInvalidException(final JwtInval return new ResponseEntity<>(response, HttpStatus.UNAUTHORIZED); } + + @ExceptionHandler(ProblemSetToggleException.class) + protected ResponseEntity handleProblemSetToggleException(final ProblemSetToggleException exception) { + log.error("handleProblemSetToggleException", exception); + + final ErrorResponse response = ErrorResponse.from(exception.getMessage(), HttpStatus.BAD_REQUEST); + + return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); + } } diff --git a/src/main/java/com/moplus/moplus_server/global/error/exception/ProblemSetToggleException.java b/src/main/java/com/moplus/moplus_server/global/error/exception/ProblemSetToggleException.java new file mode 100644 index 0000000..479902f --- /dev/null +++ b/src/main/java/com/moplus/moplus_server/global/error/exception/ProblemSetToggleException.java @@ -0,0 +1,7 @@ +package com.moplus.moplus_server.global.error.exception; + +public class ProblemSetToggleException extends RuntimeException { + public ProblemSetToggleException(String message) { + super(message); + } +} diff --git a/src/test/java/com/moplus/moplus_server/domain/problemset/ProblemSetServiceTest.java b/src/test/java/com/moplus/moplus_server/domain/problemset/ProblemSetServiceTest.java index 77fc3ab..8e12c70 100644 --- a/src/test/java/com/moplus/moplus_server/domain/problemset/ProblemSetServiceTest.java +++ b/src/test/java/com/moplus/moplus_server/domain/problemset/ProblemSetServiceTest.java @@ -12,6 +12,7 @@ import com.moplus.moplus_server.domain.problemset.service.ProblemSetUpdateService; import com.moplus.moplus_server.global.error.exception.ErrorCode; import com.moplus.moplus_server.global.error.exception.InvalidValueException; +import com.moplus.moplus_server.global.error.exception.ProblemSetToggleException; import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -124,7 +125,7 @@ void setUp() { // when & then assertThatThrownBy(() -> problemSetUpdateService.toggleConfirmProblemSet(problemSetId)) - .isInstanceOf(InvalidValueException.class) + .isInstanceOf(ProblemSetToggleException.class) .hasMessageContaining("24052001004번") // 메시지에 포함된 ID 확인 .hasMessageContaining(ErrorCode.INVALID_CONFIRM_PROBLEM.getMessage()); } From 725a34db250221315bdc536dae8986c336751edf Mon Sep 17 00:00:00 2001 From: HongGit Date: Tue, 25 Feb 2025 02:25:37 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[fix/#77]=20=EB=B0=9C=ED=96=89=20=EC=8B=A4?= =?UTF-8?q?=ED=8C=A8=20=EC=97=90=EB=9F=AC=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EC=84=B8=EB=B6=84=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/ProblemSetRepository.java | 15 ++++++++++----- .../publish/service/PublishSaveService.java | 2 +- .../global/error/exception/ErrorCode.java | 2 ++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/repository/ProblemSetRepository.java b/src/main/java/com/moplus/moplus_server/domain/problemset/repository/ProblemSetRepository.java index b145fad..533674a 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/repository/ProblemSetRepository.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/repository/ProblemSetRepository.java @@ -3,6 +3,7 @@ import com.moplus.moplus_server.domain.problemset.domain.ProblemSet; import com.moplus.moplus_server.domain.problemset.domain.ProblemSetConfirmStatus; import com.moplus.moplus_server.global.error.exception.ErrorCode; +import com.moplus.moplus_server.global.error.exception.InvalidValueException; import com.moplus.moplus_server.global.error.exception.NotFoundException; import org.springframework.data.jpa.repository.JpaRepository; @@ -12,11 +13,15 @@ default ProblemSet findByIdElseThrow(Long problemSetId) { return findById(problemSetId).orElseThrow(() -> new NotFoundException(ErrorCode.PROBLEM_SET_NOT_FOUND)); } - default void existsConfirmedActiveByIdElseThrow(Long problemSetId) { - if (!existsByIdAndIsDeletedFalseAndConfirmStatus(problemSetId, ProblemSetConfirmStatus.CONFIRMED)) { - throw new NotFoundException(ErrorCode.PROBLEM_SET_NOT_FOUND); + default void validatePublishableProblemSet(Long problemSetId) { + ProblemSet problemSet = findByIdElseThrow(problemSetId); + + if (problemSet.isDeleted()) { + throw new InvalidValueException(ErrorCode.PROBLEM_SET_DELETED); } - } - boolean existsByIdAndIsDeletedFalseAndConfirmStatus(Long problemSetId, ProblemSetConfirmStatus confirmStatus); + if (!ProblemSetConfirmStatus.CONFIRMED.equals(problemSet.getConfirmStatus())) { + throw new NotFoundException(ErrorCode.PROBLEM_SET_NOT_CONFIRMED); + } + } } diff --git a/src/main/java/com/moplus/moplus_server/domain/publish/service/PublishSaveService.java b/src/main/java/com/moplus/moplus_server/domain/publish/service/PublishSaveService.java index d134080..8d0dbd8 100644 --- a/src/main/java/com/moplus/moplus_server/domain/publish/service/PublishSaveService.java +++ b/src/main/java/com/moplus/moplus_server/domain/publish/service/PublishSaveService.java @@ -17,7 +17,7 @@ public class PublishSaveService { @Transactional public Long createPublish(PublishPostRequest request) { - problemSetRepository.existsConfirmedActiveByIdElseThrow(request.problemSetId()); + problemSetRepository.validatePublishableProblemSet(request.problemSetId()); Publish publish = request.toEntity(); // 발행날짜 유효성 검사 publish.validatePublishedDate(); diff --git a/src/main/java/com/moplus/moplus_server/global/error/exception/ErrorCode.java b/src/main/java/com/moplus/moplus_server/global/error/exception/ErrorCode.java index 777ba17..f511f7c 100644 --- a/src/main/java/com/moplus/moplus_server/global/error/exception/ErrorCode.java +++ b/src/main/java/com/moplus/moplus_server/global/error/exception/ErrorCode.java @@ -72,6 +72,8 @@ public enum ErrorCode { PUBLISH_NOT_FOUND(HttpStatus.NOT_FOUND, "발행 정보를 찾을 수 없습니다"), CANNOT_DELETE_PAST_PUBLISH(HttpStatus.BAD_REQUEST, "이미 지난 발행건은 삭제할 수 없습니다."), ALREADY_PUBLISHED_ERROR(HttpStatus.BAD_REQUEST, "이미 발행된 문항세트는 컨펌해제할 수 없습니다."), + PROBLEM_SET_DELETED(HttpStatus.BAD_REQUEST, "삭제된 문항세트는 발행할 수 없습니다"), + PROBLEM_SET_NOT_CONFIRMED(HttpStatus.BAD_REQUEST, "컨펌되지 않은 문항세트는 발행할 수 없습니다"), ;