Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

QueryDslRepository가 인터페이스를 상속하여 메소드 이름이 통일되도록 수정 #60

Merged
merged 8 commits into from
Jan 11, 2025
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