Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import com.comssa.persistence.question.domain.license.LicenseCategory;
import com.comssa.persistence.question.domain.license.LicenseSession;
import com.comssa.persistence.question.repository.jpa.LicenseSessionRepository;
import com.comssa.persistence.question.repository.querydsl.LicenseMultipleChoiceQuestionDslRepository;
import com.comssa.persistence.question.repository.querydsl.MajorMultipleChoiceQuestionDslRepository;
import com.comssa.persistence.question.repository.querydsl.impl.LicenseMultipleChoiceQuestionDslRepository;
import com.comssa.persistence.question.repository.querydsl.impl.MajorMultipleChoiceQuestionDslRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

Expand Down Expand Up @@ -56,10 +56,10 @@ public List<LicenseSession> getLicenseSessions(LicenseCategory licenseCategory)
public List<? extends Question> getAllQuestions(List<QuestionCategory> questionCategories, boolean multipleChoice) {
List<Question> questions = new ArrayList<>();
if (multipleChoice) {
questions.addAll(licenseMultipleChoiceQuestionDslRepository.findAllWhereQuestionCategories(
questions.addAll(licenseMultipleChoiceQuestionDslRepository.findAllWhereCategories(
questionCategories));
questions.addAll(majorMultipleChoiceQuestionDslRepository
.findAllWhereQuestionCategories(
.findAllWhereCategories(
questionCategories));
}
return questions;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import com.comssa.persistence.question.domain.common.Question;
import com.comssa.persistence.question.domain.common.QuestionCategory;
import com.comssa.persistence.question.domain.license.LicenseMultipleChoiceQuestion;
import com.comssa.persistence.question.repository.querydsl.LicenseMultipleChoiceQuestionDslRepository;
import com.comssa.persistence.question.repository.querydsl.impl.LicenseMultipleChoiceQuestionDslRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -19,19 +19,19 @@
@RequiredArgsConstructor
public class AdminLicenseQuestionGetService implements LicenseQuestionGetService {

private final LicenseMultipleChoiceQuestionDslRepository licenseMultipleChoiceQuestionDslRepository;
private final QuestionClassifyByCategoryService questionClassifyByCategoryService;
private final LicenseMultipleChoiceQuestionDslRepository licenseMultipleChoiceQuestionDslRepository;
private final QuestionClassifyByCategoryService questionClassifyByCategoryService;

/**
* 관리자 조회시 허용 여부와 관련 없이 모든 문제를 가져온다.
* 문제지도 섞지 않는다.
* 허용 여부 순대로 섞는다
*/
@Override
public Map<QuestionCategory, List<Question>> getClassifiedLicenseMultipleChoiceQuestion(
Long sessionId) {
List<LicenseMultipleChoiceQuestion> licenseMultipleChoiceQuestions = licenseMultipleChoiceQuestionDslRepository
.findAllWhereLicenseSessionId(sessionId);
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(licenseMultipleChoiceQuestions);
}
/**
* 관리자 조회시 허용 여부와 관련 없이 모든 문제를 가져온다.
* 문제지도 섞지 않는다.
* 허용 여부 순대로 섞는다
*/
@Override
public Map<QuestionCategory, List<Question>> getClassifiedLicenseMultipleChoiceQuestion(
Long sessionId) {
List<LicenseMultipleChoiceQuestion> licenseMultipleChoiceQuestions = licenseMultipleChoiceQuestionDslRepository
.findAllWhereLicenseSessionId(sessionId);
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(licenseMultipleChoiceQuestions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import com.comssa.persistence.question.domain.common.Question;
import com.comssa.persistence.question.domain.common.QuestionCategory;
import com.comssa.persistence.question.domain.license.LicenseMultipleChoiceQuestion;
import com.comssa.persistence.question.repository.querydsl.LicenseMultipleChoiceQuestionDslRepository;
import com.comssa.persistence.question.repository.querydsl.impl.LicenseMultipleChoiceQuestionDslRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ List<MajorMultipleChoiceQuestion> makeMultipleChoiceQuestions(
List<RequestMakeMultipleChoiceQuestionDto> requestNormalQuestionDto);

MajorMultipleChoiceQuestion makeMultipleChoiceQuestion(
RequestMakeMultipleChoiceQuestionDto requestNormalQuestionDto) throws DuplicateQuestionContentException, DuplicateQuestionContentException;
RequestMakeMultipleChoiceQuestionDto requestNormalQuestionDto) throws DuplicateQuestionContentException;

List<MajorDescriptiveQuestion> makeDescriptiveQuestions(
List<RequestMakeMajorDescriptiveQuestionDto> requestNormalQuestionDto
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import com.comssa.persistence.question.domain.common.QuestionCategory;
import com.comssa.persistence.question.domain.major.MajorDescriptiveQuestion;
import com.comssa.persistence.question.domain.major.MajorMultipleChoiceQuestion;
import com.comssa.persistence.question.repository.querydsl.MajorDescriptiveDslRepository;
import com.comssa.persistence.question.repository.querydsl.MajorMultipleChoiceQuestionDslRepository;
import com.comssa.persistence.question.repository.querydsl.impl.MajorDescriptiveDslRepository;
import com.comssa.persistence.question.repository.querydsl.impl.MajorMultipleChoiceQuestionDslRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -20,27 +20,27 @@
@RequiredArgsConstructor
@Transactional
public class BasicAdminMajorQuestionClassifiedGetService implements AdminMajorQuestionClassifiedGetService {
private final QuestionClassifyByCategoryService questionClassifyByCategoryService;
private final MajorDescriptiveDslRepository majorDescriptiveQuestionChooseRepository;
private final MajorMultipleChoiceQuestionDslRepository majorMultipleChoiceQuestionDslRepository;
private final QuestionClassifyByCategoryService questionClassifyByCategoryService;
private final MajorDescriptiveDslRepository majorDescriptiveQuestionChooseRepository;
private final MajorMultipleChoiceQuestionDslRepository majorMultipleChoiceQuestionDslRepository;

/**
* 관리자가 조회시 Approve됐는지 기준으로 정렬되며(false인 것부터),
* 이후엔 객관식 -> 주관식으로 정렬된다.
*
* @return
*/
@Override
public Map<QuestionCategory, List<Question>> getClassifiedAllMajorMultipleChoiceQuestions() {
List<MajorMultipleChoiceQuestion> majorMultipleChoiceQuestions = majorMultipleChoiceQuestionDslRepository
.findAllOrderByIfApprovedAsc();
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(majorMultipleChoiceQuestions);
}
/**
* 관리자가 조회시 Approve됐는지 기준으로 정렬되며(false인 것부터),
* 이후엔 객관식 -> 주관식으로 정렬된다.
*
* @return
*/
@Override
public Map<QuestionCategory, List<Question>> getClassifiedAllMajorMultipleChoiceQuestions() {
List<MajorMultipleChoiceQuestion> majorMultipleChoiceQuestions = majorMultipleChoiceQuestionDslRepository
.findAllOrderByIfApprovedAsc();
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(majorMultipleChoiceQuestions);
}

@Override
public Map<QuestionCategory, List<Question>> getClassifiedAllMajorDescriptiveQuestions() {
List<MajorDescriptiveQuestion> majorDescriptiveQuestions =
majorDescriptiveQuestionChooseRepository.findAllOrderByIfApprovedAsc();
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(majorDescriptiveQuestions);
}
@Override
public Map<QuestionCategory, List<Question>> getClassifiedAllMajorDescriptiveQuestions() {
List<MajorDescriptiveQuestion> majorDescriptiveQuestions =
majorDescriptiveQuestionChooseRepository.findAllOrderByIfApprovedAsc();
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(majorDescriptiveQuestions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,74 +22,74 @@
@Transactional
public class BasicAdminMajorQuestionMakeService implements AdminMajorQuestionMakeService {

private final QuestionRepository questionRepository;
private final MajorMultipleChoiceQuestionRepository majorMultipleChoiceQuestionRepository;
private final QuestionChoiceService questionChoiceService;
private final DuplicateQuestionDetector duplicateQuestionDetector;
private final QuestionRepository questionRepository;
private final MajorMultipleChoiceQuestionRepository majorMultipleChoiceQuestionRepository;
private final QuestionChoiceService questionChoiceService;
private final DuplicateQuestionDetector duplicateQuestionDetector;

/**
* 리스트로 생성
*/
@Override
public List<MajorMultipleChoiceQuestion> makeMultipleChoiceQuestions(
List<RequestMakeMultipleChoiceQuestionDto> requestDtos) {
// 중복되지 않은 질문을 필터링하여 저장
return requestDtos.stream()
.filter(this::isNotDuplicateQuestion)
.map(this::saveMajorMultipleChoiceQuestion)
.collect(Collectors.toList());
}
/**
* 리스트로 생성
*/
@Override
public List<MajorMultipleChoiceQuestion> makeMultipleChoiceQuestions(
List<RequestMakeMultipleChoiceQuestionDto> requestDtos) {
// 중복되지 않은 질문을 필터링하여 저장
return requestDtos.stream()
.filter(this::isNotDuplicateQuestion)
.map(this::saveMajorMultipleChoiceQuestion)
.collect(Collectors.toList());
}

/**
* 단일 생성
*/
@Override
public MajorMultipleChoiceQuestion makeMultipleChoiceQuestion(
RequestMakeMultipleChoiceQuestionDto requestDto) throws DuplicateQuestionContentException {
if (!isNotDuplicateQuestion(requestDto)) {
throw new DuplicateQuestionContentException();
}
return saveMajorMultipleChoiceQuestion(requestDto);
}
/**
* 단일 생성
*/
@Override
public MajorMultipleChoiceQuestion makeMultipleChoiceQuestion(
RequestMakeMultipleChoiceQuestionDto requestDto) throws DuplicateQuestionContentException {
if (!isNotDuplicateQuestion(requestDto)) {
throw new DuplicateQuestionContentException();
}
return saveMajorMultipleChoiceQuestion(requestDto);
}

@Override
public List<MajorDescriptiveQuestion> makeDescriptiveQuestions(
List<RequestMakeMajorDescriptiveQuestionDto> requestNormalQuestionDto) {
@Override
public List<MajorDescriptiveQuestion> makeDescriptiveQuestions(
List<RequestMakeMajorDescriptiveQuestionDto> requestNormalQuestionDto) {

return requestNormalQuestionDto.stream()
.map(this::saveMajorDescriptiveQuestion)
.collect(Collectors.toList());
}
return requestNormalQuestionDto.stream()
.map(this::saveMajorDescriptiveQuestion)
.collect(Collectors.toList());
}

/**
* 중복되지 않은 질문인지 확인하는 메서드
* 매번 DB에서 새롭게 조회 후 검증한다.(DTO 자체의 중복된 데이터)
*/
private boolean isNotDuplicateQuestion(RequestMakeMultipleChoiceQuestionDto requestDto) {
return majorMultipleChoiceQuestionRepository.findAll().stream()
.noneMatch(existingQuestion -> duplicateQuestionDetector.isQuestionDuplicate(
existingQuestion.getContent(), requestDto.getContent()));
}
/**
* 중복되지 않은 질문인지 확인하는 메서드
* 매번 DB에서 새롭게 조회 후 검증한다.(DTO 자체의 중복된 데이터)
*/
private boolean isNotDuplicateQuestion(RequestMakeMultipleChoiceQuestionDto requestDto) {
return majorMultipleChoiceQuestionRepository.findAll().stream()
.noneMatch(existingQuestion -> duplicateQuestionDetector.isQuestionDuplicate(
existingQuestion.getContent(), requestDto.getContent()));
}

/**
* 새로운 질문을 저장하고 선택지를 저장하는 메서드
*/
private MajorMultipleChoiceQuestion saveMajorMultipleChoiceQuestion(
RequestMakeMultipleChoiceQuestionDto requestDto) {
MajorMultipleChoiceQuestion question = MajorMultipleChoiceQuestion.makeWithDto(requestDto);
questionRepository.save(question);
questionChoiceService.saveWith(requestDto, question);
return question;
}
/**
* 새로운 질문을 저장하고 선택지를 저장하는 메서드
*/
private MajorMultipleChoiceQuestion saveMajorMultipleChoiceQuestion(
RequestMakeMultipleChoiceQuestionDto requestDto) {
MajorMultipleChoiceQuestion question = MajorMultipleChoiceQuestion.makeWithDto(requestDto);
questionRepository.save(question);
questionChoiceService.saveWith(requestDto, question);
return question;
}

private MajorDescriptiveQuestion saveMajorDescriptiveQuestion(
RequestMakeMajorDescriptiveQuestionDto requestDto
) {
MajorDescriptiveQuestion question = MajorDescriptiveQuestion.makeWithDto(
requestDto
);
questionRepository.save(question);
return question;
}
private MajorDescriptiveQuestion saveMajorDescriptiveQuestion(
RequestMakeMajorDescriptiveQuestionDto requestDto
) {
MajorDescriptiveQuestion question = MajorDescriptiveQuestion.makeWithDto(
requestDto
);
questionRepository.save(question);
return question;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import com.comssa.persistence.question.domain.major.MajorDescriptiveQuestion;
import com.comssa.persistence.question.domain.major.MajorMultipleChoiceQuestion;
import com.comssa.persistence.question.dto.major.request.RequestGetQuestionByCategoryAndLevelDto;
import com.comssa.persistence.question.repository.querydsl.MajorDescriptiveDslRepository;
import com.comssa.persistence.question.repository.querydsl.MajorMultipleChoiceQuestionDslRepository;
import com.comssa.persistence.question.repository.querydsl.impl.MajorDescriptiveDslRepository;
import com.comssa.persistence.question.repository.querydsl.impl.MajorMultipleChoiceQuestionDslRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

Expand All @@ -20,41 +20,41 @@
@Service
@RequiredArgsConstructor
public class UserMajorQuestionClassifiedGetService implements MajorQuestionClassifiedGetService<Question> {
private final MajorMultipleChoiceQuestionDslRepository majorMultipleChoiceQuestionDslRepository;
private final QuestionClassifyByCategoryService questionClassifyByCategoryService;
private final MajorDescriptiveDslRepository majorDescriptiveQuestionDslRepository;
private final MajorMultipleChoiceQuestionDslRepository majorMultipleChoiceQuestionDslRepository;
private final QuestionClassifyByCategoryService questionClassifyByCategoryService;
private final MajorDescriptiveDslRepository majorDescriptiveQuestionDslRepository;

/**
* 분야, 난이도 파라미터로 문제를 조회하는 경우 - 객관식.
* 문제 선택지들을 섞어준다.
*/
@Override
public Map<QuestionCategory, List<Question>> getApprovedClassifiedMajorMultipleChoiceQuestions(
RequestGetQuestionByCategoryAndLevelDto requestGetQuestionByCategoryAndLevelDto) {
List<MajorMultipleChoiceQuestion> majorMultipleChoiceQuestions = majorMultipleChoiceQuestionDslRepository
.findAllWhereCategoriesAndLevelsAndIfApproved(
requestGetQuestionByCategoryAndLevelDto.getQuestionCategories(),
requestGetQuestionByCategoryAndLevelDto.getQuestionLevels(),
true);
for (MajorMultipleChoiceQuestion question : majorMultipleChoiceQuestions) {
Collections.shuffle(question.getQuestionChoices());
}
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(majorMultipleChoiceQuestions);
}
/**
* 분야, 난이도 파라미터로 문제를 조회하는 경우 - 객관식.
* 문제 선택지들을 섞어준다.
*/
@Override
public Map<QuestionCategory, List<Question>> getApprovedClassifiedMajorMultipleChoiceQuestions(
RequestGetQuestionByCategoryAndLevelDto requestGetQuestionByCategoryAndLevelDto) {
List<MajorMultipleChoiceQuestion> majorMultipleChoiceQuestions = majorMultipleChoiceQuestionDslRepository
.findAllCategoriesAndLevelsAndIfApproved(
requestGetQuestionByCategoryAndLevelDto.getQuestionCategories(),
requestGetQuestionByCategoryAndLevelDto.getQuestionLevels(),
true);
for (MajorMultipleChoiceQuestion question : majorMultipleChoiceQuestions) {
Collections.shuffle(question.getQuestionChoices());
}
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(majorMultipleChoiceQuestions);
}


/**
* 분야, 난이도 파라미터로 문제를 조회하는 경우 - 서술형
*/
@Override
public Map<QuestionCategory, List<Question>> getApprovedClassifiedDescriptiveQuestions(
RequestGetQuestionByCategoryAndLevelDto dto) {
List<MajorDescriptiveQuestion> majorDescriptiveQuestions = majorDescriptiveQuestionDslRepository
.findWithCategoriesAndLevelsAndIfApproved(
dto.getQuestionCategories(),
dto.getQuestionLevels(),
true
);
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(majorDescriptiveQuestions);
}
/**
* 분야, 난이도 파라미터로 문제를 조회하는 경우 - 서술형
*/
@Override
public Map<QuestionCategory, List<Question>> getApprovedClassifiedDescriptiveQuestions(
RequestGetQuestionByCategoryAndLevelDto dto) {
List<MajorDescriptiveQuestion> majorDescriptiveQuestions = majorDescriptiveQuestionDslRepository
.findAllCategoriesAndLevelsAndIfApproved(
dto.getQuestionCategories(),
dto.getQuestionLevels(),
true
);
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(majorDescriptiveQuestions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,13 @@ class SwaggerConfig {

// WebMvcEndpointHandlerMapping 객체를 생성하여 반환합니다.
return WebMvcEndpointHandlerMapping(
endpointMapping, // 엔드포인트 매핑
webEndpoints, // 웹 엔드포인트 컬렉션
endpointMediaTypes, // 엔드포인트 미디어 타입
corsProperties.toCorsConfiguration(), // CORS 설정
EndpointLinksResolver(allEndpoints, basePath), // 엔드포인트 링크 리졸버
shouldRegisterLinksMapping, // 링크 매핑 등록 여부
null, // 추가적인 설정 (여기서는 null로 설정)
endpointMapping,
webEndpoints,
endpointMediaTypes,
corsProperties.toCorsConfiguration(),
EndpointLinksResolver(allEndpoints, basePath),
shouldRegisterLinksMapping,
null,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ void setUp() {
responseMultipleChoiceQuestionDtos = new ArrayList<>();
licenseMultipleChoiceQuestion = LicenseMultipleChoiceQuestion.makeForTest("test");
licenseMultipleChoiceQuestions.add(licenseMultipleChoiceQuestion);
responseMultipleChoiceQuestionDto = ResponseMultipleChoiceQuestionDto.forLicense(licenseMultipleChoiceQuestion);
responseMultipleChoiceQuestionDto = ResponseMultipleChoiceQuestionDto.from(licenseMultipleChoiceQuestion);
responseMultipleChoiceQuestionDtos.add(responseMultipleChoiceQuestionDto);
}

Expand Down
Loading
Loading