diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/controller/ProblemController.java b/src/main/java/com/moplus/moplus_server/domain/problem/controller/ProblemController.java index 6002770..9db45a7 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/controller/ProblemController.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/controller/ProblemController.java @@ -3,6 +3,7 @@ import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest; import com.moplus.moplus_server.domain.problem.dto.request.ProblemUpdateRequest; import com.moplus.moplus_server.domain.problem.dto.response.ProblemGetResponse; +import com.moplus.moplus_server.domain.problem.dto.response.ProblemPostResponse; import com.moplus.moplus_server.domain.problem.service.ChildProblemService; import com.moplus.moplus_server.domain.problem.service.ProblemDeleteService; import com.moplus.moplus_server.domain.problem.service.ProblemGetService; @@ -45,10 +46,10 @@ public ResponseEntity getProblem( @PostMapping("") @Operation(summary = "문항 생성", description = "문제를 생성합니다. 기출/변형 문제는 모든 값이 필수이며 창작 문제는 문항 타입만 필수 입니다.") - public ResponseEntity createProblem( + public ResponseEntity createProblem( @Valid @RequestBody ProblemPostRequest request ) { - return ResponseEntity.ok(new IdResponse(problemSaveService.createProblem(request))); + return ResponseEntity.ok(problemSaveService.createProblem(request)); } @PutMapping("/{id}") diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Difficulty.java b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Difficulty.java index 7cbcf54..68a0949 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Difficulty.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Difficulty.java @@ -17,14 +17,14 @@ public class Difficulty { private Integer difficulty; public Difficulty(Integer difficulty) { - if (difficulty == null) { - return; - } validate(difficulty); this.difficulty = difficulty; } - private void validate(int difficulty) { + private void validate(Integer difficulty) { + if (difficulty == null) { + return; + } if (difficulty < 1 || difficulty > 10) { throw new InvalidValueException(ErrorCode.INVALID_DIFFICULTY); } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java index 2b08fad..e245855 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java @@ -134,7 +134,7 @@ public void updateChildProblem(List inputChildProblems) { if (isConfirmed && this.childProblems.size() != inputChildProblems.size()) { throw new InvalidValueException(ErrorCode.INVALID_CHILD_PROBLEM_SIZE); } - + for (int i = 0; i < inputChildProblems.size(); i++) { this.childProblems.get(i).update(inputChildProblems.get(i)); } @@ -160,10 +160,10 @@ public boolean isValid() { } public String getTitle() { - return title.getTitle(); + return title != null ? title.getTitle() : "제목 없음"; } public Integer getDifficulty() { - return difficulty.getDifficulty(); + return difficulty != null ? difficulty.getDifficulty() : null; } } \ No newline at end of file diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemPostResponse.java b/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemPostResponse.java new file mode 100644 index 0000000..330c694 --- /dev/null +++ b/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemPostResponse.java @@ -0,0 +1,15 @@ +package com.moplus.moplus_server.domain.problem.dto.response; + +import com.moplus.moplus_server.domain.problem.domain.problem.Problem; +import jakarta.validation.constraints.NotNull; + +public record ProblemPostResponse( + @NotNull(message = "문항 ID는 필수입니다") + Long id, + @NotNull(message = "문항 custom ID는 필수입니다") + Long problemCustomId +) { + public static ProblemPostResponse of(Problem problem) { + return new ProblemPostResponse(problem.getId(), problem.getPracticeTestId()); + } +} diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java index 24ea2f9..7ceacf4 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java @@ -5,6 +5,7 @@ import com.moplus.moplus_server.domain.problem.domain.problem.ProblemAdminIdService; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId; import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest; +import com.moplus.moplus_server.domain.problem.dto.response.ProblemPostResponse; import com.moplus.moplus_server.domain.problem.repository.PracticeTestTagRepository; import com.moplus.moplus_server.domain.problem.repository.ProblemRepository; import com.moplus.moplus_server.domain.problem.service.mapper.ProblemMapper; @@ -22,13 +23,12 @@ public class ProblemSaveService { private final ProblemMapper problemMapper; @Transactional - public Long createProblem(ProblemPostRequest request) { + public ProblemPostResponse createProblem(ProblemPostRequest request) { PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId()); ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.number(), practiceTestTag, request.problemType()); Problem problem = problemMapper.from(request, problemCustomId, practiceTestTag); - - return problemRepository.save(problem).getId(); + return ProblemPostResponse.of(problemRepository.save(problem)); } } diff --git a/src/test/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveServiceTest.java b/src/test/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveServiceTest.java index 21b2a2f..e6d5ae2 100644 --- a/src/test/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveServiceTest.java +++ b/src/test/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveServiceTest.java @@ -6,6 +6,7 @@ import com.moplus.moplus_server.domain.problem.domain.problem.Problem; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType; import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest; +import com.moplus.moplus_server.domain.problem.dto.response.ProblemPostResponse; import com.moplus.moplus_server.domain.problem.repository.ProblemRepository; import com.moplus.moplus_server.global.error.exception.NotFoundException; import org.junit.jupiter.api.BeforeEach; @@ -46,12 +47,12 @@ class 문항생성 { @Test void 성공() { // when - Long createdProblemId = problemSaveService.createProblem(problemPostRequest); + ProblemPostResponse problemResponse = problemSaveService.createProblem(problemPostRequest); // then - assertThat(createdProblemId).isNotNull(); + assertThat(problemResponse).isNotNull(); - Problem savedProblem = problemRepository.findByIdElseThrow(createdProblemId); + Problem savedProblem = problemRepository.findByIdElseThrow(problemResponse.id()); assertThat(savedProblem).isNotNull(); assertThat(savedProblem.getProblemType()).isEqualTo(ProblemType.GICHUL_PROBLEM); }