Merge branch 'master' into master-web
This commit is contained in:
@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@@ -18,7 +19,11 @@ public class EnumsController {
|
||||
|
||||
@GetMapping("/enums/quiz-categories")
|
||||
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")
|
||||
|
||||
@@ -29,14 +29,20 @@ public interface QuizRepository extends JpaRepository<Quiz, Long>, QuizRepositor
|
||||
|
||||
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()
|
||||
? findByQuizCategoryInAndQuizLevelAndIsEnableTrue(quizCategorySet, quizLevel)
|
||||
: findByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(quizIdSet, quizCategorySet, quizLevel);
|
||||
? findByQuizCategoryInAndQuizLevel(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);
|
||||
|
||||
}
|
||||
@@ -75,7 +75,7 @@ public class QuizService {
|
||||
.map(v -> v.getQuiz().getId())
|
||||
.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) {
|
||||
|
||||
@@ -8,4 +8,6 @@ public interface EnumMapperType {
|
||||
|
||||
String getDesc();
|
||||
|
||||
boolean isExpose();
|
||||
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ public class EnumMapperValue implements EnumMapperType {
|
||||
private final String code;
|
||||
private final String title;
|
||||
private final String desc;
|
||||
private final boolean expose;
|
||||
|
||||
@Override
|
||||
public String name() {
|
||||
|
||||
@@ -42,6 +42,7 @@ public class EnumMapperFactory {
|
||||
.code(enumMapperType.name())
|
||||
.title(enumMapperType.getTitle())
|
||||
.desc(enumMapperType.getDesc())
|
||||
.expose(enumMapperType.isExpose())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
@@ -8,22 +8,23 @@ import lombok.RequiredArgsConstructor;
|
||||
@RequiredArgsConstructor
|
||||
public enum QuizCategory implements EnumMapperType {
|
||||
|
||||
JAVA("Java", "Java 언어와 관련된 면접 질문을 살펴보세요"),
|
||||
SPRING("Spring Framework", "Spring 프레임워크와 관련된 면접 질문을 살펴보세요"),
|
||||
SERVER("Server Programming", "서버 프로그래밍 관련된 면접 질문을 살펴보세요"),
|
||||
NETWORK("Network", "네트워크와 관련된 면접 질문을 살펴보세요"),
|
||||
OPERATING_SYSTEM("Operating System", "운영체제와 관련된 면접 질문을 살펴보세요"),
|
||||
DATABASE("Database", "데이터베이스와 관련된 면접 질문을 살펴보세요"),
|
||||
PROGRAMMING("Overall Programming", "전반적인 프로그래밍과 관련된 면접 질문을 살펴보세요"),
|
||||
DATA_STRUCTURE("Data Structure", "자료구조와 관련된 면접 질문을 살펴보세요"),
|
||||
ALGORITHM("Algorithm", "알고리즘과 관련된 면접 질문을 살펴보세요"),
|
||||
PROBLEM_SOLVING("Problem Solving", "문제 해결과 관련된 면접 질문을 살펴보세요"),
|
||||
CULTURE("Culture Fit", "문화 적합도와 관련된 면접 질문을 살펴보세요"),
|
||||
EXPERIENCE("Personal Experience", "개인의 경험와 관련된 면접 질문을 살펴보세요"),
|
||||
PERSONALITY("Personality", "개인의 성향과 관련된 면접 질문을 살펴보세요"),
|
||||
JAVA("Java", "Java 언어와 관련된 면접 질문을 살펴보세요", true),
|
||||
SPRING("Spring Framework", "Spring 프레임워크와 관련된 면접 질문을 살펴보세요", true),
|
||||
SERVER("Server Programming", "서버 프로그래밍 관련된 면접 질문을 살펴보세요", true),
|
||||
NETWORK("Network", "네트워크와 관련된 면접 질문을 살펴보세요", true),
|
||||
OPERATING_SYSTEM("Operating System", "운영체제와 관련된 면접 질문을 살펴보세요", true),
|
||||
DATABASE("Database", "데이터베이스와 관련된 면접 질문을 살펴보세요", true),
|
||||
PROGRAMMING("Overall Programming", "전반적인 프로그래밍과 관련된 면접 질문을 살펴보세요", true),
|
||||
DATA_STRUCTURE("Data Structure", "자료구조와 관련된 면접 질문을 살펴보세요", true),
|
||||
ALGORITHM("Algorithm", "알고리즘과 관련된 면접 질문을 살펴보세요", true),
|
||||
PROBLEM_SOLVING("Problem Solving", "문제 해결과 관련된 면접 질문을 살펴보세요", true),
|
||||
CULTURE("Culture Fit", "문화 적합도와 관련된 면접 질문을 살펴보세요", false),
|
||||
EXPERIENCE("Personal Experience", "개인의 경험와 관련된 면접 질문을 살펴보세요", false),
|
||||
PERSONALITY("Personality", "개인의 성향과 관련된 면접 질문을 살펴보세요", false),
|
||||
;
|
||||
|
||||
private final String title;
|
||||
private final String desc;
|
||||
private final boolean expose;
|
||||
|
||||
}
|
||||
|
||||
@@ -11,18 +11,18 @@ import java.util.Arrays;
|
||||
@RequiredArgsConstructor
|
||||
public enum QuizDay implements EnumMapperType {
|
||||
|
||||
MONDAY("Monday", "월요일", DayOfWeek.MONDAY),
|
||||
TUESDAY("Tuesday", "화요일", DayOfWeek.TUESDAY),
|
||||
WEDNESDAY("Wednesday", "수요일", DayOfWeek.WEDNESDAY),
|
||||
THURSDAY("Thursday", "목요일", DayOfWeek.THURSDAY),
|
||||
FRIDAY("Friday", "금요일", DayOfWeek.FRIDAY),
|
||||
SATURDAY("Saturday", "토요일", DayOfWeek.SATURDAY),
|
||||
SUNDAY("Sunday", "일요일", DayOfWeek.SUNDAY),
|
||||
MONDAY("Monday", "월요일", DayOfWeek.MONDAY, true),
|
||||
TUESDAY("Tuesday", "화요일", DayOfWeek.TUESDAY, true),
|
||||
WEDNESDAY("Wednesday", "수요일", DayOfWeek.WEDNESDAY, true),
|
||||
THURSDAY("Thursday", "목요일", DayOfWeek.THURSDAY, true),
|
||||
FRIDAY("Friday", "금요일", DayOfWeek.FRIDAY, true),
|
||||
SATURDAY("Saturday", "토요일", DayOfWeek.SATURDAY, true),
|
||||
SUNDAY("Sunday", "일요일", DayOfWeek.SUNDAY, true),
|
||||
;
|
||||
|
||||
private final String title;
|
||||
private final String desc;
|
||||
private final DayOfWeek dayOfWeek;
|
||||
private final DayOfWeek dayOfWeek;private final boolean expose;
|
||||
|
||||
public static QuizDay findQuizDay(final DayOfWeek dayOfWeek) {
|
||||
return Arrays.stream(QuizDay.values())
|
||||
|
||||
@@ -8,12 +8,13 @@ import lombok.RequiredArgsConstructor;
|
||||
@RequiredArgsConstructor
|
||||
public enum QuizLevel implements EnumMapperType {
|
||||
|
||||
NEW("New", "신입"),
|
||||
JUNIOR("Junior", "주니어"),
|
||||
SENIOR("Senior", "시니어"),
|
||||
NEW("New", "신입", true),
|
||||
JUNIOR("Junior", "주니어", true),
|
||||
SENIOR("Senior", "시니어", true),
|
||||
;
|
||||
|
||||
private final String title;
|
||||
private final String desc;
|
||||
private final boolean expose;
|
||||
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.ResultActions;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -43,7 +44,7 @@ class EnumsControllerTest {
|
||||
// then
|
||||
final ResultActions resultActions = result.andExpect(status().isOk());
|
||||
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
|
||||
|
||||
@@ -269,10 +269,10 @@ class QuizRepositoryTest {
|
||||
final Set<Long> idSet = new HashSet<>(Arrays.asList(savedQuiz1.getId(), savedQuiz2.getId(), savedQuiz3.getId(), savedQuiz4.getId()));
|
||||
|
||||
// when
|
||||
final List<Quiz> unsolvedQuizList1 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(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> unsolvedQuizList3 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(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> unsolvedQuizList1 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.ALGORITHM, QuizCategory.CULTURE)), 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.customFindByIdNotInAndQuizCategoryInAndQuizLevel(Collections.emptySet(), new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.ALGORITHM, QuizCategory.DATABASE)), QuizLevel.NEW);
|
||||
final List<Quiz> unsolvedQuizList4 = quizRepository.customFindByIdNotInAndQuizCategoryInAndQuizLevel(idSet, new HashSet<>(Arrays.asList(QuizCategory.JAVA, QuizCategory.DATABASE)), QuizLevel.NEW);
|
||||
|
||||
// then
|
||||
assertThat(unsolvedQuizList1.size()).isEqualTo(2);
|
||||
|
||||
@@ -203,7 +203,7 @@ class QuizServiceTest {
|
||||
quizCategorySet.add(QuizCategory.EXPERIENCE);
|
||||
|
||||
doReturn(solvedQuizList).when(solvedQuizRepository).findAllByUser_Id(userId);
|
||||
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevelAndIsEnableTrue(solvedQuizIdList, quizCategorySet, quizLevel);
|
||||
doReturn(unsolvedQuizList).when(quizRepository).customFindByIdNotInAndQuizCategoryInAndQuizLevel(solvedQuizIdList, quizCategorySet, quizLevel);
|
||||
|
||||
// when
|
||||
final List<Quiz> result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
|
||||
@@ -224,7 +224,7 @@ class QuizServiceTest {
|
||||
quizCategorySet.add(QuizCategory.EXPERIENCE);
|
||||
|
||||
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
|
||||
final List<Quiz> result = quizService.getUnsolvedQuizList(userId, quizLevel, quizCategorySet);
|
||||
|
||||
Reference in New Issue
Block a user