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 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")
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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) {
|
||||||
|
|||||||
@@ -8,4 +8,6 @@ public interface EnumMapperType {
|
|||||||
|
|
||||||
String getDesc();
|
String getDesc();
|
||||||
|
|
||||||
|
boolean isExpose();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user