Merge branch 'master' into master-web

This commit is contained in:
MangKyu
2022-02-01 04:22:24 +09:00
12 changed files with 56 additions and 38 deletions

View File

@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -18,7 +19,11 @@ public class EnumsController {
@GetMapping("/enums/quiz-categories") @GetMapping("/enums/quiz-categories")
public ResponseEntity<List<EnumMapperValue>> getQuizCategoryList() { public ResponseEntity<List<EnumMapperValue>> getQuizCategoryList() {
return ResponseEntity.ok(enumMapperFactory.get(EnumMapperKey.QUIZ_CATEGORY)); final List<EnumMapperValue> quizCategoryList = enumMapperFactory.get(EnumMapperKey.QUIZ_CATEGORY);
return ResponseEntity.ok(quizCategoryList.stream()
.filter(EnumMapperValue::isExpose)
.collect(Collectors.toList()));
} }
@GetMapping("/enums/quiz-levels") @GetMapping("/enums/quiz-levels")

View File

@@ -29,14 +29,20 @@ public interface QuizRepository extends JpaRepository<Quiz, Long>, QuizRepositor
List<Quiz> findByIdNotInAndQuizLevelAndIsEnableTrue(final Set<Long> quizIdSet, final QuizLevel quizLevel); List<Quiz> findByIdNotInAndQuizLevelAndIsEnableTrue(final Set<Long> quizIdSet, final QuizLevel quizLevel);
default List<Quiz> customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(final Set<Long> quizIdSet, final Set<QuizCategory> quizCategorySet, final QuizLevel quizLevel) { /**
* 여기 아래는 메일 발송에 사용되는 API들이므로 IsEnable 처리를 제외함
*
*
**/
default List<Quiz> customFindByIdNotInAndQuizCategoryInAndQuizLevel(final Set<Long> quizIdSet, final Set<QuizCategory> quizCategorySet, final QuizLevel quizLevel) {
return quizIdSet.isEmpty() return quizIdSet.isEmpty()
? findByQuizCategoryInAndQuizLevelAndIsEnableTrue(quizCategorySet, quizLevel) ? findByQuizCategoryInAndQuizLevel(quizCategorySet, quizLevel)
: findByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(quizIdSet, quizCategorySet, quizLevel); : findByIdNotInAndQuizCategoryInAndQuizLevel(quizIdSet, quizCategorySet, quizLevel);
} }
List<Quiz> findByQuizCategoryInAndQuizLevelAndIsEnableTrue(final Set<QuizCategory> quizCategorySet, final QuizLevel quizLevel); List<Quiz> findByQuizCategoryInAndQuizLevel(final Set<QuizCategory> quizCategorySet, final QuizLevel quizLevel);
List<Quiz> findByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(final Set<Long> quizIdSet, final Set<QuizCategory> quizCategorySet, final QuizLevel quizLevel); List<Quiz> findByIdNotInAndQuizCategoryInAndQuizLevel(final Set<Long> quizIdSet, final Set<QuizCategory> quizCategorySet, final QuizLevel quizLevel);
} }

View File

@@ -75,7 +75,7 @@ public class QuizService {
.map(v -> v.getQuiz().getId()) .map(v -> v.getQuiz().getId())
.collect(Collectors.toSet()); .collect(Collectors.toSet());
return quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(solvedQuizIdList, quizCategorySet, quizLevel); return quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel);
} }
public List<Quiz> getRandomQuizListUnderLimit(final List<Quiz> quizList, final Integer quizSize) { public List<Quiz> getRandomQuizListUnderLimit(final List<Quiz> quizList, final Integer quizSize) {

View File

@@ -8,4 +8,6 @@ public interface EnumMapperType {
String getDesc(); String getDesc();
boolean isExpose();
} }

View File

@@ -12,6 +12,7 @@ public class EnumMapperValue implements EnumMapperType {
private final String code; private final String code;
private final String title; private final String title;
private final String desc; private final String desc;
private final boolean expose;
@Override @Override
public String name() { public String name() {

View File

@@ -42,6 +42,7 @@ public class EnumMapperFactory {
.code(enumMapperType.name()) .code(enumMapperType.name())
.title(enumMapperType.getTitle()) .title(enumMapperType.getTitle())
.desc(enumMapperType.getDesc()) .desc(enumMapperType.getDesc())
.expose(enumMapperType.isExpose())
.build(); .build();
} }

View File

@@ -8,22 +8,23 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public enum QuizCategory implements EnumMapperType { public enum QuizCategory implements EnumMapperType {
JAVA("Java", "Java 언어와 관련된 면접 질문을 살펴보세요"), JAVA("Java", "Java 언어와 관련된 면접 질문을 살펴보세요", true),
SPRING("Spring Framework", "Spring 프레임워크와 관련된 면접 질문을 살펴보세요"), SPRING("Spring Framework", "Spring 프레임워크와 관련된 면접 질문을 살펴보세요", true),
SERVER("Server Programming", "서버 프로그래밍 관련된 면접 질문을 살펴보세요"), SERVER("Server Programming", "서버 프로그래밍 관련된 면접 질문을 살펴보세요", true),
NETWORK("Network", "네트워크와 관련된 면접 질문을 살펴보세요"), NETWORK("Network", "네트워크와 관련된 면접 질문을 살펴보세요", true),
OPERATING_SYSTEM("Operating System", "운영체제와 관련된 면접 질문을 살펴보세요"), OPERATING_SYSTEM("Operating System", "운영체제와 관련된 면접 질문을 살펴보세요", true),
DATABASE("Database", "데이터베이스와 관련된 면접 질문을 살펴보세요"), DATABASE("Database", "데이터베이스와 관련된 면접 질문을 살펴보세요", true),
PROGRAMMING("Overall Programming", "전반적인 프로그래밍과 관련된 면접 질문을 살펴보세요"), PROGRAMMING("Overall Programming", "전반적인 프로그래밍과 관련된 면접 질문을 살펴보세요", true),
DATA_STRUCTURE("Data Structure", "자료구조와 관련된 면접 질문을 살펴보세요"), DATA_STRUCTURE("Data Structure", "자료구조와 관련된 면접 질문을 살펴보세요", true),
ALGORITHM("Algorithm", "알고리즘과 관련된 면접 질문을 살펴보세요"), ALGORITHM("Algorithm", "알고리즘과 관련된 면접 질문을 살펴보세요", true),
PROBLEM_SOLVING("Problem Solving", "문제 해결과 관련된 면접 질문을 살펴보세요"), PROBLEM_SOLVING("Problem Solving", "문제 해결과 관련된 면접 질문을 살펴보세요", true),
CULTURE("Culture Fit", "문화 적합도와 관련된 면접 질문을 살펴보세요"), CULTURE("Culture Fit", "문화 적합도와 관련된 면접 질문을 살펴보세요", false),
EXPERIENCE("Personal Experience", "개인의 경험와 관련된 면접 질문을 살펴보세요"), EXPERIENCE("Personal Experience", "개인의 경험와 관련된 면접 질문을 살펴보세요", false),
PERSONALITY("Personality", "개인의 성향과 관련된 면접 질문을 살펴보세요"), PERSONALITY("Personality", "개인의 성향과 관련된 면접 질문을 살펴보세요", false),
; ;
private final String title; private final String title;
private final String desc; private final String desc;
private final boolean expose;
} }

View File

@@ -11,18 +11,18 @@ import java.util.Arrays;
@RequiredArgsConstructor @RequiredArgsConstructor
public enum QuizDay implements EnumMapperType { public enum QuizDay implements EnumMapperType {
MONDAY("Monday", "월요일", DayOfWeek.MONDAY), MONDAY("Monday", "월요일", DayOfWeek.MONDAY, true),
TUESDAY("Tuesday", "화요일", DayOfWeek.TUESDAY), TUESDAY("Tuesday", "화요일", DayOfWeek.TUESDAY, true),
WEDNESDAY("Wednesday", "수요일", DayOfWeek.WEDNESDAY), WEDNESDAY("Wednesday", "수요일", DayOfWeek.WEDNESDAY, true),
THURSDAY("Thursday", "목요일", DayOfWeek.THURSDAY), THURSDAY("Thursday", "목요일", DayOfWeek.THURSDAY, true),
FRIDAY("Friday", "금요일", DayOfWeek.FRIDAY), FRIDAY("Friday", "금요일", DayOfWeek.FRIDAY, true),
SATURDAY("Saturday", "토요일", DayOfWeek.SATURDAY), SATURDAY("Saturday", "토요일", DayOfWeek.SATURDAY, true),
SUNDAY("Sunday", "일요일", DayOfWeek.SUNDAY), SUNDAY("Sunday", "일요일", DayOfWeek.SUNDAY, true),
; ;
private final String title; private final String title;
private final String desc; private final String desc;
private final DayOfWeek dayOfWeek; private final DayOfWeek dayOfWeek;private final boolean expose;
public static QuizDay findQuizDay(final DayOfWeek dayOfWeek) { public static QuizDay findQuizDay(final DayOfWeek dayOfWeek) {
return Arrays.stream(QuizDay.values()) return Arrays.stream(QuizDay.values())

View File

@@ -8,12 +8,13 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
public enum QuizLevel implements EnumMapperType { public enum QuizLevel implements EnumMapperType {
NEW("New", "신입"), NEW("New", "신입", true),
JUNIOR("Junior", "주니어"), JUNIOR("Junior", "주니어", true),
SENIOR("Senior", "시니어"), SENIOR("Senior", "시니어", true),
; ;
private final String title; private final String title;
private final String desc; private final String desc;
private final boolean expose;
} }

View File

@@ -15,6 +15,7 @@ import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import java.util.Arrays;
import java.util.List; import java.util.List;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@@ -43,7 +44,7 @@ class EnumsControllerTest {
// then // then
final ResultActions resultActions = result.andExpect(status().isOk()); final ResultActions resultActions = result.andExpect(status().isOk());
final String stringResponse = resultActions.andReturn().getResponse().getContentAsString(); final String stringResponse = resultActions.andReturn().getResponse().getContentAsString();
assertThat(new Gson().fromJson(stringResponse, List.class).size()).isEqualTo(QuizCategory.values().length); assertThat(new Gson().fromJson(stringResponse, List.class).size()).isEqualTo(Arrays.stream(QuizCategory.values()).filter(QuizCategory::isExpose).count());
} }
@Test @Test

View File

@@ -269,10 +269,10 @@ class QuizRepositoryTest {
final Set<Long> idSet = new HashSet<>(Arrays.asList(savedQuiz1.getId(), savedQuiz2.getId(), savedQuiz3.getId(), savedQuiz4.getId())); final Set<Long> idSet = new HashSet<>(Arrays.asList(savedQuiz1.getId(), savedQuiz2.getId(), savedQuiz3.getId(), savedQuiz4.getId()));
// when // when
final List<Quiz> unsolvedQuizList1 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.ALGORITHM, QuizCategory.CULTURE)), QuizLevel.NEW); final List<Quiz> unsolvedQuizList1 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.ALGORITHM, QuizCategory.CULTURE)), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList2 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.CULTURE, QuizCategory.NETWORK)), QuizLevel.NEW); final List<Quiz> unsolvedQuizList2 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.CULTURE, QuizCategory.NETWORK)), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList3 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.ALGORITHM, QuizCategory.DATABASE)), QuizLevel.NEW); final List<Quiz> unsolvedQuizList3 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.ALGORITHM, QuizCategory.DATABASE)), QuizLevel.NEW);
final List<Quiz> unsolvedQuizList4 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(idSet, new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.DATABASE)), QuizLevel.NEW); final List<Quiz> unsolvedQuizList4 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(idSet, new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.DATABASE)), QuizLevel.NEW);
// then // then
assertThat(unsolvedQuizList1.size()).isEqualTo(2); assertThat(unsolvedQuizList1.size()).isEqualTo(2);

View File

@@ -203,7 +203,7 @@ class QuizServiceTest {
quizCategorySet.add(QuizCategory.EXPERIENCE); quizCategorySet.add(QuizCategory.EXPERIENCE);
doReturn(solvedQuizList).when(solvedQuizRepository).findAllByUser_Id(userId); doReturn(solvedQuizList).when(solvedQuizRepository).findAllByUser_Id(userId);
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(solvedQuizIdList, quizCategorySet, quizLevel); doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel);
// when // when
final List<Quiz> result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet); final List<Quiz> result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
@@ -224,7 +224,7 @@ class QuizServiceTest {
quizCategorySet.add(QuizCategory.EXPERIENCE); quizCategorySet.add(QuizCategory.EXPERIENCE);
doReturn(solvedQuizList).when(solvedQuizRepository).findAllByUser_Id(userId); doReturn(solvedQuizList).when(solvedQuizRepository).findAllByUser_Id(userId);
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(Collections.emptySet(), quizCategorySet, quizLevel); doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), quizCategorySet, quizLevel);
// when // when
final List<Quiz> result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet); final List<Quiz> result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);