diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerController.java b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerController.java index 2d33157..b9c32ee 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerController.java @@ -11,13 +11,13 @@ import javax.validation.Valid; @RestController @RequiredArgsConstructor -public class AddAnswerController { +class AddAnswerController { private final UpdateAnswerService answerService; @PostMapping("/answers") - public ResponseEntity postAnswer(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) { - answerService.addAnswer(addAnswerRequest); + public ResponseEntity add(@RequestBody @Valid final AddAnswerRequest request) { + answerService.add(request); return ResponseEntity.noContent() .build(); } diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerRequest.java b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerRequest.java index 48b8936..f933a0a 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerRequest.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerRequest.java @@ -1,9 +1,9 @@ package com.mangkyu.employment.interview.app.answer.controller; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; @@ -11,17 +11,17 @@ import java.util.UUID; @Getter @Builder -@RequiredArgsConstructor -@NoArgsConstructor(force = true) +@NoArgsConstructor +@AllArgsConstructor public class AddAnswerRequest { @NotBlank - private final String quizResourceId; + private String quizResourceId; - private final String resourceId = String.valueOf(UUID.randomUUID()); + private String resourceId = String.valueOf(UUID.randomUUID()); @NotBlank @Size(max = 5000) - private final String description; + private String description; } diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/DeleteAnswerController.java b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/DeleteAnswerController.java index 49dc55e..2f63a35 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/DeleteAnswerController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/DeleteAnswerController.java @@ -9,13 +9,13 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor -public class DeleteAnswerController { +class DeleteAnswerController { private final DeleteAnswerService answerService; @DeleteMapping("/answers/{resourceId}") - public ResponseEntity deleteAnswer(@PathVariable final String resourceId) { - answerService.deleteAnswer(resourceId); + public ResponseEntity delete(@PathVariable final String resourceId) { + answerService.delete(resourceId); return ResponseEntity.noContent().build(); } diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerController.java b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerController.java index bb09fc0..b4f1259 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerController.java @@ -9,13 +9,13 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor -public class GetAnswerController { +class GetAnswerController { private final GetAnswerService answerService; @GetMapping("/answers/{resourceId}") - public ResponseEntity getAnswer(@PathVariable final String resourceId) { - return ResponseEntity.ok(answerService.getAnswer(resourceId)); + public ResponseEntity get(@PathVariable final String resourceId) { + return ResponseEntity.ok(answerService.get(resourceId)); } } \ No newline at end of file diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerResponse.java b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerResponse.java index 76cf523..a10064f 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerResponse.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerResponse.java @@ -1,17 +1,19 @@ package com.mangkyu.employment.interview.app.answer.controller; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import lombok.RequiredArgsConstructor; +import lombok.NoArgsConstructor; @Getter @Builder -@RequiredArgsConstructor +@NoArgsConstructor +@AllArgsConstructor public class GetAnswerResponse { - private final String resourceId; - private final String quizResourceId; - private final String description; - private final long createdAt; + private String resourceId; + private String quizResourceId; + private String description; + private long createdAt; } \ No newline at end of file diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/UpdateAnswerController.java b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/UpdateAnswerController.java index a5bd41e..a64cd35 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/controller/UpdateAnswerController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/controller/UpdateAnswerController.java @@ -1,6 +1,5 @@ package com.mangkyu.employment.interview.app.answer.controller; -import com.mangkyu.employment.interview.app.answer.service.GetAnswerService; import com.mangkyu.employment.interview.app.answer.service.UpdateAnswerService; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -12,13 +11,13 @@ import javax.validation.Valid; @RestController @RequiredArgsConstructor -public class UpdateAnswerController { +class UpdateAnswerController { private final UpdateAnswerService answerService; @PutMapping("/answers") - public ResponseEntity putAnswer(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) { - answerService.addAnswer(addAnswerRequest); + public ResponseEntity update(@RequestBody @Valid final AddAnswerRequest request) { + answerService.add(request); return ResponseEntity.noContent() .build(); } 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 0a34a17..4e4b94a 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 @@ -2,7 +2,6 @@ package com.mangkyu.employment.interview.app.answer.service; import com.mangkyu.employment.interview.app.answer.entity.Answer; import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository; -import com.mangkyu.employment.interview.app.quiz.service.QuizService; import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode; import com.mangkyu.employment.interview.erros.exception.RestApiException; import lombok.RequiredArgsConstructor; @@ -11,13 +10,12 @@ import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor -@Transactional(readOnly = true) +@Transactional public class DeleteAnswerService { private final AnswerRepository answerRepository; - @Transactional - public void deleteAnswer(final String resourceId) throws RestApiException { + public void delete(final String resourceId) { final Answer answer = answerRepository.findByResourceId(resourceId) .orElseThrow(() -> new RestApiException(CommonErrorCode.RESOURCE_NOT_FOUND)); answer.getQuiz().setAnswer(null); diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/service/GetAnswerService.java b/src/main/java/com/mangkyu/employment/interview/app/answer/service/GetAnswerService.java index ebb540d..7885d9a 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/service/GetAnswerService.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/service/GetAnswerService.java @@ -17,7 +17,7 @@ public class GetAnswerService { private final AnswerRepository answerRepository; - public GetAnswerResponse getAnswer(final String resourceId) throws RestApiException { + public GetAnswerResponse get(final String resourceId) { final Answer answer = answerRepository.findByResourceId(resourceId) .orElseThrow(() -> new RestApiException(CommonErrorCode.RESOURCE_NOT_FOUND)); diff --git a/src/main/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerService.java b/src/main/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerService.java index 8b0d7e9..e2c29a1 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerService.java +++ b/src/main/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerService.java @@ -12,22 +12,21 @@ import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor -@Transactional(readOnly = true) +@Transactional public class UpdateAnswerService { private final QuizService quizService; private final AnswerRepository answerRepository; - @Transactional - public void addAnswer(final AddAnswerRequest addAnswerRequest) { - final Quiz quiz = quizService.findQuiz(addAnswerRequest.getQuizResourceId()); + public void add(final AddAnswerRequest request) { + final Quiz quiz = quizService.findQuiz(request.getQuizResourceId()); final Answer quizAnswer = quiz.getAnswer(); if (quizAnswer == null) { - final Answer answer = QuizDtoConverter.convert(addAnswerRequest, quiz); + final Answer answer = QuizDtoConverter.convert(request, quiz); answerRepository.save(answer); quiz.setAnswer(answer); } else { - quizAnswer.setDescription(addAnswerRequest.getDescription()); + quizAnswer.setDescription(request.getDescription()); } } diff --git a/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/WebQuizController.java b/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/WebQuizController.java index b594e89..4c1ab5c 100644 --- a/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/WebQuizController.java +++ b/src/main/java/com/mangkyu/employment/interview/app/quiz/controller/WebQuizController.java @@ -24,7 +24,7 @@ public class WebQuizController { model.addAttribute("quiz", quiz); if (StringUtils.isNotBlank(quiz.getAnswerResourceId())) { - final GetAnswerResponse answer = answerService.getAnswer(quiz.getAnswerResourceId()); + final GetAnswerResponse answer = answerService.get(quiz.getAnswerResourceId()); model.addAttribute("answer", answer); } else { model.addAttribute("answer", GetAnswerResponse.builder().build()); diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerControllerTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerControllerTest.java index 57ac6ea..5188992 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerControllerTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/controller/AddAnswerControllerTest.java @@ -31,17 +31,15 @@ class AddAnswerControllerTest { @MethodSource("provideParameters") public void addAnswerFail_InvalidParameter(final String quizResourceId, final String desc) throws Exception { // given - final String url = "/answers"; - - final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder() + final AddAnswerRequest request = AddAnswerRequest.builder() .quizResourceId(quizResourceId) .description(desc) .build(); // when final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.post(url) - .content(new Gson().toJson(addAnswerRequest)) + MockMvcRequestBuilders.post("/answers") + .content(new Gson().toJson(request)) .contentType(MediaType.APPLICATION_JSON) ); @@ -52,8 +50,6 @@ class AddAnswerControllerTest { @Test public void addAnswerSuccess() throws Exception { // given - final String url = "/answers"; - final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder() .quizResourceId(UUID.randomUUID().toString()) .description("desc") @@ -62,7 +58,7 @@ class AddAnswerControllerTest { // when final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.post(url) + MockMvcRequestBuilders.post("/answers") .content(new Gson().toJson(addAnswerRequest)) .contentType(MediaType.APPLICATION_JSON) ); diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/controller/DeleteAnswerControllerTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/controller/DeleteAnswerControllerTest.java index 516dd55..2a277a1 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/answer/controller/DeleteAnswerControllerTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/controller/DeleteAnswerControllerTest.java @@ -24,11 +24,10 @@ class DeleteAnswerControllerTest { @Test public void deleteAnswerSuccess() throws Exception { // given - final String url = "/answers/" + UUID.randomUUID(); // when final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.delete(url) + MockMvcRequestBuilders.delete("/answers/" + UUID.randomUUID()) ); // then diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerControllerTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerControllerTest.java index 1061543..b36fef4 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerControllerTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/controller/GetAnswerControllerTest.java @@ -27,7 +27,6 @@ class GetAnswerControllerTest { public void getAnswer() throws Exception { // given final String resourceId = UUID.randomUUID().toString(); - final String url = "/answers/" + resourceId; final GetAnswerResponse getAnswerResponse = GetAnswerResponse.builder() .resourceId(resourceId) .quizResourceId(UUID.randomUUID().toString()) @@ -35,11 +34,11 @@ class GetAnswerControllerTest { .createdAt(System.currentTimeMillis()) .build(); - doReturn(getAnswerResponse).when(answerService).getAnswer(resourceId); + doReturn(getAnswerResponse).when(answerService).get(resourceId); // when final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.get(url) + MockMvcRequestBuilders.get("/answers/" + resourceId) ); // then diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/controller/UpdateAnswerControllerTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/controller/UpdateAnswerControllerTest.java index 6aca526..932fcf6 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/answer/controller/UpdateAnswerControllerTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/controller/UpdateAnswerControllerTest.java @@ -31,8 +31,6 @@ class UpdateAnswerControllerTest { @MethodSource("provideParameters") public void putAnswerFail_InvalidParameter(final String quizResourceId, final String desc) throws Exception { // given - final String url = "/answers"; - final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder() .quizResourceId(quizResourceId) .description(desc) @@ -40,7 +38,7 @@ class UpdateAnswerControllerTest { // when final ResultActions result = mockMvc.perform( - MockMvcRequestBuilders.put(url) + MockMvcRequestBuilders.put("/answers") .content(new Gson().toJson(addAnswerRequest)) .contentType(MediaType.APPLICATION_JSON) ); diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/repository/AnswerRepositoryTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/repository/AnswerRepositoryTest.java index 7d4817d..969699d 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/answer/repository/AnswerRepositoryTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/repository/AnswerRepositoryTest.java @@ -24,25 +24,6 @@ class AnswerRepositoryTest { @Autowired private EntityManager entityManager; - @Test - public void insertAnswer() { - // given - final Quiz quiz = EntityCreationUtils.quiz(); - final Quiz savedQuiz = quizRepository.save(quiz); - final Answer answer = EntityCreationUtils.answer(savedQuiz); - - answerRepository.save(answer); - savedQuiz.setAnswer(answer); - entityManager.flush(); - - // then - final Answer result = answerRepository.save(answer); - - assertThat(result.getResourceId()).isEqualTo(answer.getResourceId()); - assertThat(result.getDescription()).isEqualTo(answer.getDescription()); - assertThat(result.getQuiz()).isEqualTo(quiz); - } - @Test public void selectAnswerByQuizId() { // given diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/service/DeleteAnswerServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/service/DeleteAnswerServiceTest.java index 542ebb2..08e9687 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/answer/service/DeleteAnswerServiceTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/service/DeleteAnswerServiceTest.java @@ -1,11 +1,8 @@ package com.mangkyu.employment.interview.app.answer.service; -import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest; -import com.mangkyu.employment.interview.app.answer.controller.GetAnswerResponse; import com.mangkyu.employment.interview.app.answer.entity.Answer; import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository; import com.mangkyu.employment.interview.app.quiz.entity.Quiz; -import com.mangkyu.employment.interview.app.quiz.service.QuizService; import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode; import com.mangkyu.employment.interview.erros.exception.RestApiException; import com.mangkyu.employment.interview.testutils.EntityCreationUtils; @@ -14,7 +11,6 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.test.util.ReflectionTestUtils; import java.util.Optional; import java.util.UUID; @@ -32,27 +28,35 @@ class DeleteAnswerServiceTest { private AnswerRepository answerRepository; @Test - public void deleteAnswerByQuizResourceIdFail_AnswerNotExists() { + void deleteAnswerByQuizResourceIdFail_AnswerNotExists() { // given final String resourceId = UUID.randomUUID().toString(); - doReturn(Optional.empty()).when(answerRepository).findByResourceId(resourceId); + + doReturn(Optional.empty()) + .when(answerRepository) + .findByResourceId(resourceId); // when - final RestApiException result = assertThrows(RestApiException.class, () -> answerService.deleteAnswer(resourceId)); + final RestApiException result = assertThrows( + RestApiException.class, + () -> answerService.delete(resourceId)); // then assertThat(result.getErrorCode()).isEqualTo(CommonErrorCode.RESOURCE_NOT_FOUND); } @Test - public void deleteAnswerByQuizResourceIdSuccess() throws RestApiException { + void deleteAnswerByQuizResourceIdSuccess() throws RestApiException { // given final Quiz quiz = EntityCreationUtils.quiz(); final Answer answer = EntityCreationUtils.answer(quiz); - doReturn(Optional.of(answer)).when(answerRepository).findByResourceId(answer.getResourceId()); + + doReturn(Optional.of(answer)) + .when(answerRepository) + .findByResourceId(answer.getResourceId()); // when - answerService.deleteAnswer(answer.getResourceId()); + answerService.delete(answer.getResourceId()); // then diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/service/GetAnswerServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/service/GetAnswerServiceTest.java index 6d59b5b..2ffca01 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/answer/service/GetAnswerServiceTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/service/GetAnswerServiceTest.java @@ -1,6 +1,5 @@ package com.mangkyu.employment.interview.app.answer.service; -import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest; import com.mangkyu.employment.interview.app.answer.controller.GetAnswerResponse; import com.mangkyu.employment.interview.app.answer.entity.Answer; import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository; @@ -14,7 +13,6 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.test.util.ReflectionTestUtils; import java.util.Optional; import java.util.UUID; @@ -38,10 +36,15 @@ class GetAnswerServiceTest { public void getAnswerByQuizResourceIdFail_AnswerNotExists() { // given final String resourceId = UUID.randomUUID().toString(); - doReturn(Optional.empty()).when(answerRepository).findByResourceId(resourceId); + + doReturn(Optional.empty()) + .when(answerRepository) + .findByResourceId(resourceId); // when - final RestApiException result = assertThrows(RestApiException.class, () -> answerService.getAnswer(resourceId)); + final RestApiException result = assertThrows( + RestApiException.class, + () -> answerService.get(resourceId)); // then assertThat(result.getErrorCode()).isEqualTo(CommonErrorCode.RESOURCE_NOT_FOUND); @@ -52,10 +55,13 @@ class GetAnswerServiceTest { // given final Quiz quiz = EntityCreationUtils.quiz(); final Answer answer = EntityCreationUtils.answer(quiz); - doReturn(Optional.of(answer)).when(answerRepository).findByResourceId(answer.getResourceId()); + + doReturn(Optional.of(answer)) + .when(answerRepository) + .findByResourceId(answer.getResourceId()); // when - final GetAnswerResponse result = answerService.getAnswer(answer.getResourceId()); + final GetAnswerResponse result = answerService.get(answer.getResourceId()); // then assertThat(result.getDescription()).isEqualTo(answer.getDescription()); diff --git a/src/test/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerServiceTest.java b/src/test/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerServiceTest.java index ed7d39a..58f8f00 100644 --- a/src/test/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerServiceTest.java +++ b/src/test/java/com/mangkyu/employment/interview/app/answer/service/UpdateAnswerServiceTest.java @@ -40,10 +40,12 @@ class UpdateAnswerServiceTest { final Answer answer = EntityCreationUtils.answer(quiz); ReflectionTestUtils.setField(quiz, "answer", answer); - doReturn(quiz).when(quizService).findQuiz(addAnswerRequest.getQuizResourceId()); + doReturn(quiz) + .when(quizService) + .findQuiz(addAnswerRequest.getQuizResourceId()); // when - answerService.addAnswer(addAnswerRequest); + answerService.add(addAnswerRequest); // then @@ -60,10 +62,12 @@ class UpdateAnswerServiceTest { .build(); final Quiz quiz = EntityCreationUtils.quiz(); - doReturn(quiz).when(quizService).findQuiz(addAnswerRequest.getQuizResourceId()); + doReturn(quiz) + .when(quizService) + .findQuiz(addAnswerRequest.getQuizResourceId()); // when - answerService.addAnswer(addAnswerRequest); + answerService.add(addAnswerRequest); // then verify(answerRepository, times(1)).save(any(Answer.class));