Refactor Quiz DTO

This commit is contained in:
MangKyu
2023-02-18 19:58:44 +09:00
parent 9fb8e48c6c
commit 84c3e6f5c5
26 changed files with 68 additions and 142 deletions

View File

@@ -2,7 +2,6 @@ package com.mangkyu.employment.interview.app.mail.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mangkyu.employment.interview.app.member.entity.Member;
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequestHolder;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
@@ -85,16 +84,6 @@ public class MailController {
// quizRepository.save(quiz(QuizCategory.DATABASE, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR), "퇴근합시다"));
}
@Transactional
@GetMapping("/temp")
public ResponseEntity<AddQuizRequestHolder> sendMail1() throws IOException {
final File file = ResourceUtils.getFile("classpath:quiz/quiz-211220.json");
final ObjectMapper objectMapper = new ObjectMapper();
final AddQuizRequestHolder addQuizRequestHolder = objectMapper.readValue(file, AddQuizRequestHolder.class);
return ResponseEntity.ok(addQuizRequestHolder);
}
@GetMapping("/temp2")
public ResponseEntity<Void> sendMail2() {
mailService.sendMail("whalsrb1226@naver.com", quizList2(), true);

View File

@@ -1,10 +1,8 @@
package com.mangkyu.employment.interview.app.quiz.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequest;
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequestHolder;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import lombok.RequiredArgsConstructor;
import lombok.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
@@ -16,6 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;
import java.util.List;
@RestController
@RequiredArgsConstructor
@@ -29,12 +28,23 @@ class AddQuizController {
final File file = ResourceUtils.getFile("classpath:quiz/quiz.json");
final AddQuizRequestHolder addQuizRequestHolder = objectMapper.readValue(file, AddQuizRequestHolder.class);
addQuizRequestHolder.getQuizList().forEach(quizService::addQuiz);
addQuizRequestHolder.getQuizList()
.forEach(quizService::addQuiz);
return ResponseEntity.noContent()
.build();
}
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
static class AddQuizRequestHolder {
private List<AddQuizRequest> quizList;
}
@PostMapping("/quizzes")
public ResponseEntity<Void> addQuiz(@RequestBody @Valid final AddQuizRequest addQuizRequest) {
quizService.addQuiz(addQuizRequest);

View File

@@ -0,0 +1,30 @@
package com.mangkyu.employment.interview.app.quiz.controller;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import lombok.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.UUID;
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AddQuizRequest {
@NotBlank
private String title;
@NotNull
private QuizCategory quizCategory;
private String resourceId = String.valueOf(UUID.randomUUID());
@NotEmpty
private List<QuizLevel> quizLevel;
}

View File

@@ -1,12 +1,14 @@
package com.mangkyu.employment.interview.app.quiz.controller;
import com.mangkyu.employment.interview.app.quiz.dto.QuizCategoryResponseHolder;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
@RequiredArgsConstructor
class GetQuizCategoryController {
@@ -14,11 +16,8 @@ class GetQuizCategoryController {
private final QuizService quizService;
@GetMapping("/quizzes/categories")
public ResponseEntity<QuizCategoryResponseHolder> getQuizCategoryList() {
final QuizCategoryResponseHolder response = QuizCategoryResponseHolder.builder()
.categoryList(quizService.getQuizCategoryList())
.build();
return ResponseEntity.ok(response);
public ResponseEntity<Map<String, List<QuizCategoryResponse>>> getQuizCategoryList() {
return ResponseEntity.ok(Map.of("categoryList", quizService.getQuizCategoryList()));
}
}

View File

@@ -1,9 +1,5 @@
package com.mangkyu.employment.interview.app.quiz.controller;
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizRequest;
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponse;
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponseHolder;
import com.mangkyu.employment.interview.app.quiz.dto.SearchQuizListRequest;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;

View File

@@ -1,4 +1,4 @@
package com.mangkyu.employment.interview.app.quiz.dto;
package com.mangkyu.employment.interview.app.quiz.controller;
import com.mangkyu.employment.interview.app.quiz.constants.QuizConstants;
import com.mangkyu.employment.interview.enums.value.QuizCategory;

View File

@@ -1,4 +1,4 @@
package com.mangkyu.employment.interview.app.quiz.dto;
package com.mangkyu.employment.interview.app.quiz.controller;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.mangkyu.employment.interview.enums.common.EnumMapperValue;

View File

@@ -1,4 +1,4 @@
package com.mangkyu.employment.interview.app.quiz.dto;
package com.mangkyu.employment.interview.app.quiz.controller;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.mangkyu.employment.interview.app.common.pagination.ResponseMetaData;

View File

@@ -1,4 +1,4 @@
package com.mangkyu.employment.interview.app.quiz.dto;
package com.mangkyu.employment.interview.app.quiz.controller;
import lombok.Builder;
import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package com.mangkyu.employment.interview.app.quiz.dto;
package com.mangkyu.employment.interview.app.quiz.controller;
import com.mangkyu.employment.interview.app.quiz.constants.QuizConstants;
import com.mangkyu.employment.interview.enums.value.QuizCategory;

View File

@@ -4,7 +4,6 @@ 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.service.GetAnswerService;
import com.mangkyu.employment.interview.app.quiz.converter.QuizDtoConverter;
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponse;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;

View File

@@ -3,7 +3,7 @@ package com.mangkyu.employment.interview.app.quiz.converter;
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.quiz.dto.GetQuizResponse;
import com.mangkyu.employment.interview.app.quiz.controller.GetQuizResponse;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.enums.common.EnumMapperValue;
import com.mangkyu.employment.interview.enums.value.QuizLevel;

View File

@@ -1,33 +0,0 @@
package com.mangkyu.employment.interview.app.quiz.dto;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.UUID;
@Getter
@Builder
@RequiredArgsConstructor
@NoArgsConstructor(force = true)
public class AddQuizRequest {
@NotBlank
private final String title;
@NotNull
private final QuizCategory quizCategory;
private final String resourceId = String.valueOf(UUID.randomUUID());
@NotEmpty
private final List<QuizLevel> quizLevel;
}

View File

@@ -1,18 +0,0 @@
package com.mangkyu.employment.interview.app.quiz.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import java.util.List;
@Getter
@Builder
@RequiredArgsConstructor
@NoArgsConstructor(force = true)
public class AddQuizRequestHolder {
private final List<AddQuizRequest> quizList;
}

View File

@@ -1,16 +0,0 @@
package com.mangkyu.employment.interview.app.quiz.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.List;
@Getter
@Builder
@RequiredArgsConstructor
public class QuizCategoryResponseHolder {
private final List<QuizCategoryResponse> categoryList;
}

View File

@@ -1,6 +1,6 @@
package com.mangkyu.employment.interview.app.quiz.repository;
import com.mangkyu.employment.interview.app.quiz.dto.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.service.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

View File

@@ -1,6 +1,6 @@
package com.mangkyu.employment.interview.app.quiz.repository;
import com.mangkyu.employment.interview.app.quiz.dto.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.service.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.entity.QQuiz;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.enums.value.QuizCategory;

View File

@@ -1,22 +1,22 @@
package com.mangkyu.employment.interview.app.quiz.dto;
package com.mangkyu.employment.interview.app.quiz.service;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import java.util.Set;
@Getter
@Builder
@RequiredArgsConstructor
@NoArgsConstructor(force = true)
@NoArgsConstructor
@AllArgsConstructor
public class QuizSearchCondition {
private final String query;
private final Set<QuizCategory> categories;
private final Set<QuizLevel> levels;
private String query;
private Set<QuizCategory> categories;
private Set<QuizLevel> levels;
}

View File

@@ -1,9 +1,9 @@
package com.mangkyu.employment.interview.app.quiz.service;
import com.mangkyu.employment.interview.app.quiz.controller.*;
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
import com.mangkyu.employment.interview.erros.exception.RestApiException;
import com.mangkyu.employment.interview.app.quiz.converter.QuizDtoConverter;
import com.mangkyu.employment.interview.app.quiz.dto.*;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository;
import com.mangkyu.employment.interview.app.solvedquiz.repository.SolvedQuizRepository;

View File

@@ -1,7 +1,6 @@
package com.mangkyu.employment.interview.app.quiz.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequest;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import org.junit.jupiter.api.Test;

View File

@@ -1,6 +1,5 @@
package com.mangkyu.employment.interview.app.quiz.controller;
import com.mangkyu.employment.interview.app.quiz.dto.QuizCategoryResponse;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import org.junit.jupiter.api.Test;

View File

@@ -1,9 +1,5 @@
package com.mangkyu.employment.interview.app.quiz.controller;
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizRequest;
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponse;
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponseHolder;
import com.mangkyu.employment.interview.app.quiz.dto.SearchQuizListRequest;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import com.mangkyu.employment.interview.enums.common.EnumMapperType;

View File

@@ -3,7 +3,7 @@ package com.mangkyu.employment.interview.app.quiz.converter;
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.quiz.dto.GetQuizResponse;
import com.mangkyu.employment.interview.app.quiz.controller.GetQuizResponse;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.enums.common.EnumMapperType;
import com.mangkyu.employment.interview.enums.common.EnumMapperValue;

View File

@@ -2,7 +2,7 @@ package com.mangkyu.employment.interview.app.quiz.repository;
import com.mangkyu.employment.interview.JpaTestConfig;
import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository;
import com.mangkyu.employment.interview.app.quiz.dto.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.service.QuizSearchCondition;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.enums.value.QuizCategory;
import com.mangkyu.employment.interview.enums.value.QuizLevel;

View File

@@ -1,6 +1,6 @@
package com.mangkyu.employment.interview.app.quiz.service;
import com.mangkyu.employment.interview.app.quiz.dto.*;
import com.mangkyu.employment.interview.app.quiz.controller.*;
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
import com.mangkyu.employment.interview.app.quiz.repository.QuizRepository;
import com.mangkyu.employment.interview.app.solvedquiz.entity.SolvedQuiz;

View File

@@ -1,36 +1,12 @@
package com.mangkyu.employment.interview.erros.handler;
import com.google.gson.Gson;
//import com.mangkyu.employment.interview.app.quiz.controller.GetQuizController;
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
import com.mangkyu.employment.interview.erros.errorcode.ErrorCode;
import com.mangkyu.employment.interview.erros.response.ErrorResponse;
import com.mangkyu.employment.interview.erros.exception.RestApiException;
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequest;
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
import com.mangkyu.employment.interview.enums.value.QuizLevel;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import java.util.Collections;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.doThrow;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@Disabled
@ExtendWith(MockitoExtension.class)