Refactor access modifier, line and ... etc

This commit is contained in:
MangKyu
2023-02-18 17:21:23 +09:00
parent c0955737e4
commit 5901cf1d02
18 changed files with 77 additions and 92 deletions

View File

@@ -11,13 +11,13 @@ import javax.validation.Valid;
@RestController
@RequiredArgsConstructor
public class AddAnswerController {
class AddAnswerController {
private final UpdateAnswerService answerService;
@PostMapping("/answers")
public ResponseEntity<Void> postAnswer(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) {
answerService.addAnswer(addAnswerRequest);
public ResponseEntity<Void> add(@RequestBody @Valid final AddAnswerRequest request) {
answerService.add(request);
return ResponseEntity.noContent()
.build();
}

View File

@@ -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;
}

View File

@@ -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<Void> deleteAnswer(@PathVariable final String resourceId) {
answerService.deleteAnswer(resourceId);
public ResponseEntity<Void> delete(@PathVariable final String resourceId) {
answerService.delete(resourceId);
return ResponseEntity.noContent().build();
}

View File

@@ -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<GetAnswerResponse> getAnswer(@PathVariable final String resourceId) {
return ResponseEntity.ok(answerService.getAnswer(resourceId));
public ResponseEntity<GetAnswerResponse> get(@PathVariable final String resourceId) {
return ResponseEntity.ok(answerService.get(resourceId));
}
}

View File

@@ -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;
}

View File

@@ -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<Void> putAnswer(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) {
answerService.addAnswer(addAnswerRequest);
public ResponseEntity<Void> update(@RequestBody @Valid final AddAnswerRequest request) {
answerService.add(request);
return ResponseEntity.noContent()
.build();
}

View File

@@ -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);

View File

@@ -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));

View File

@@ -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());
}
}

View File

@@ -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());

View File

@@ -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)
);

View File

@@ -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

View File

@@ -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

View File

@@ -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)
);

View File

@@ -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

View File

@@ -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

View File

@@ -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());

View File

@@ -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));