Skip to content

Commit

Permalink
style: 코딩 컨벤션 적용
Browse files Browse the repository at this point in the history
  • Loading branch information
starwook committed Dec 19, 2024
1 parent 1c0fd5f commit 5be6899
Show file tree
Hide file tree
Showing 9 changed files with 158 additions and 160 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,33 +12,33 @@
@Aspect
@Component
public class LoginAspect {
/**
* 특정 메서드에 @AddLoginStatusAttribute 어노테이션이 있으면
* 메서드 실행 전후에 이 advice가 실행됩니다.
* Model에 login 상태 부여
*/
@Around("@annotation(com.comssa.api.login.aspect.AddLoginStatusAttributeToView)")
public Object addLoginStatusAttribute(ProceedingJoinPoint joinPoint) throws Throwable {
// 현재 메서드의 파라미터 가져오기
Object[] args = joinPoint.getArgs();
/**
* 특정 메서드에 @AddLoginStatusAttribute 어노테이션이 있으면
* 메서드 실행 전후에 이 advice가 실행됩니다.
* Model에 login 상태 부여
*/
@Around("@annotation(com.comssa.api.login.aspect.AddLoginStatusAttributeToView)")
public Object addLoginStatusAttribute(ProceedingJoinPoint joinPoint) throws Throwable {
// 현재 메서드의 파라미터 가져오기
Object[] args = joinPoint.getArgs();

// Model 파라미터 찾기
for (Object arg : args) {
if (arg instanceof Model) {
Model model = (Model) arg;
// 인증 상태 확인 및 isLogin 속성 추가
// Model 파라미터 찾기
for (Object arg : args) {
if (arg instanceof Model) {
Model model = (Model) arg;
// 인증 상태 확인 및 isLogin 속성 추가

// cognito 요청을 하면 자동으로 저장 됨.
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
// cognito 요청을 하면 자동으로 저장 됨.
Authentication auth = SecurityContextHolder.getContext().getAuthentication();

// 시큐리티 컨텍스트에 유저 관련 정보가 저장되어있다면
boolean isAuthenticated =
auth != null && auth.isAuthenticated() && !(auth instanceof AnonymousAuthenticationToken);
model.addAttribute("isLogin", isAuthenticated);
}
}
// 시큐리티 컨텍스트에 유저 관련 정보가 저장되어있다면
boolean isAuthenticated =
auth != null && auth.isAuthenticated() && !(auth instanceof AnonymousAuthenticationToken);
model.addAttribute("isLogin", isAuthenticated);
}
}

// 메서드 실행
return joinPoint.proceed(args);
}
// 메서드 실행
return joinPoint.proceed(args);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
public interface QuestionUpdateService<T extends Question> {

// 기본 구현이 필요한 메서드에 default 사용
default T changeDescription(Long questionId, RequestChangeQuestionDescriptionDto requestChangeQuestionDescriptionDto) {
default T changeDescription(
Long questionId, RequestChangeQuestionDescriptionDto requestChangeQuestionDescriptionDto) {
T question = findById(questionId);
question.changeDescription(requestChangeQuestionDescriptionDto.getDescription());
return question;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,19 @@
@Transactional
@RequiredArgsConstructor
public class AdminLicenseQuestionGetService implements LicenseQuestionGetService {
private final LicenseMultipleChoiceQuestionRepository licenseMultipleChoiceQuestionRepository;
private final QuestionClassifyByCategoryService questionClassifyByCategoryService;
private final LicenseMultipleChoiceQuestionRepository licenseMultipleChoiceQuestionRepository;
private final QuestionClassifyByCategoryService questionClassifyByCategoryService;

/**
* 관리자 조회시 허용 여부와 관련 없이 모든 문제를 가져온다.
* 문제지도 섞지 않는다.
* 허용 여부 순대로 섞는다
*/
@Override
public Map<QuestionCategory, List<Question>> getClassifiedLicenseMultipleChoiceQuestion(
Long sessionId) {
List<LicenseMultipleChoiceQuestion> licenseMultipleChoiceQuestions = licenseMultipleChoiceQuestionRepository
.findAllByLicenseSessionIdFetchChoicesOrderByApproved(sessionId);
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(licenseMultipleChoiceQuestions);
}
/**
* 관리자 조회시 허용 여부와 관련 없이 모든 문제를 가져온다.
* 문제지도 섞지 않는다.
* 허용 여부 순대로 섞는다
*/
@Override
public Map<QuestionCategory, List<Question>> getClassifiedLicenseMultipleChoiceQuestion(
Long sessionId) {
List<LicenseMultipleChoiceQuestion> licenseMultipleChoiceQuestions = licenseMultipleChoiceQuestionRepository
.findAllByLicenseSessionIdFetchChoicesOrderByApproved(sessionId);
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(licenseMultipleChoiceQuestions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,16 @@

@Service
public interface MajorQuestionClassifiedGetService<T extends Question> {
/**
* 분류별로 나누어 문제를 반환
*/
Map<QuestionCategory, List<T>> getApprovedClassifiedMajorMultipleChoiceQuestions(
RequestGetQuestionByCategoryAndLevelDto requestGetQuestionByCategoryAndLevelDto);
/**
* 분류별로 나누어 문제를 반환
*/
Map<QuestionCategory, List<T>> getApprovedClassifiedMajorMultipleChoiceQuestions(
RequestGetQuestionByCategoryAndLevelDto requestGetQuestionByCategoryAndLevelDto);


Map<QuestionCategory, List<T>> getApprovedClassifiedDescriptiveQuestions(
RequestGetQuestionByCategoryAndLevelDto requestGetQuestionByCategoryAndLevelDto
);
Map<QuestionCategory, List<T>> getApprovedClassifiedDescriptiveQuestions(
RequestGetQuestionByCategoryAndLevelDto requestGetQuestionByCategoryAndLevelDto
);

}

Original file line number Diff line number Diff line change
Expand Up @@ -22,74 +22,74 @@
@Transactional
public class BasicAdminMajorQuestionMakeService implements AdminMajorQuestionMakeService {

private final MajorMultipleChoiceQuestionRepository majorMultipleChoiceQuestionRepository;
private final MajorDescriptiveQuestionRepository majorDescriptiveQuestionRepository;
private final QuestionChoiceService questionChoiceService;
private final DuplicateQuestionDetector duplicateQuestionDetector;
private final MajorMultipleChoiceQuestionRepository majorMultipleChoiceQuestionRepository;
private final MajorDescriptiveQuestionRepository majorDescriptiveQuestionRepository;
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 DuplicateQuestionException {
if (!isNotDuplicateQuestion(requestDto)) {
throw new DuplicateQuestionException();
}
return saveMajorMultipleChoiceQuestion(requestDto);
}
/**
* 단일 생성
*/
@Override
public MajorMultipleChoiceQuestion makeMultipleChoiceQuestion(
RequestMakeMultipleChoiceQuestionDto requestDto) throws DuplicateQuestionException {
if (!isNotDuplicateQuestion(requestDto)) {
throw new DuplicateQuestionException();
}
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);
majorMultipleChoiceQuestionRepository.save(question);
questionChoiceService.saveWith(requestDto, question);
return question;
}
/**
* 새로운 질문을 저장하고 선택지를 저장하는 메서드
*/
private MajorMultipleChoiceQuestion saveMajorMultipleChoiceQuestion(
RequestMakeMultipleChoiceQuestionDto requestDto) {
MajorMultipleChoiceQuestion question = MajorMultipleChoiceQuestion.makeWithDto(requestDto);
majorMultipleChoiceQuestionRepository.save(question);
questionChoiceService.saveWith(requestDto, question);
return question;
}

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

Original file line number Diff line number Diff line change
Expand Up @@ -19,38 +19,38 @@
@Service
@RequiredArgsConstructor
public class UserMajorQuestionClassifiedGetService implements MajorQuestionClassifiedGetService<Question> {
private final MajorMultipleChoiceQuestionDbService majorMultipleChoiceQuestionDbService;
private final QuestionClassifyByCategoryService questionClassifyByCategoryService;
private final MajorDescriptiveQuestionRepository majorDescriptiveQuestionRepository;
private final MajorMultipleChoiceQuestionDbService majorMultipleChoiceQuestionDbService;
private final QuestionClassifyByCategoryService questionClassifyByCategoryService;
private final MajorDescriptiveQuestionRepository majorDescriptiveQuestionRepository;

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


/**
* 분야, 난이도 파라미터로 문제를 조회하는 경우 - 서술형
*/
@Override
public Map<QuestionCategory, List<Question>> getApprovedClassifiedDescriptiveQuestions(
RequestGetQuestionByCategoryAndLevelDto requestGetQuestionByCategoryAndLevelDto) {
List<MajorDescriptiveQuestion> majorDescriptiveQuestions = majorDescriptiveQuestionRepository
.findWithCategoriesAndLevelsAndIfApproved(
requestGetQuestionByCategoryAndLevelDto.getQuestionCategories(),
requestGetQuestionByCategoryAndLevelDto.getQuestionLevels());
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(majorDescriptiveQuestions);
}
/**
* 분야, 난이도 파라미터로 문제를 조회하는 경우 - 서술형
*/
@Override
public Map<QuestionCategory, List<Question>> getApprovedClassifiedDescriptiveQuestions(
RequestGetQuestionByCategoryAndLevelDto requestGetQuestionByCategoryAndLevelDto) {
List<MajorDescriptiveQuestion> majorDescriptiveQuestions = majorDescriptiveQuestionRepository
.findWithCategoriesAndLevelsAndIfApproved(
requestGetQuestionByCategoryAndLevelDto.getQuestionCategories(),
requestGetQuestionByCategoryAndLevelDto.getQuestionLevels());
return questionClassifyByCategoryService.classifyQuestionByCategoryOrdered(majorDescriptiveQuestions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,7 @@ void majorQuestionPage() throws Exception {

@Test
@DisplayName("자격증 문제 조회")
void
licenseQuestionPage() throws Exception {
void licenseQuestionPage() throws Exception {
final String PATH = "/question/license/1";
Mockito.when(licenseSessionService.getLicenseSessionById(any())).thenReturn(licenseSession);
Mockito.when(userLicenseQuestionGetService.getClassifiedLicenseMultipleChoiceQuestion(any()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,6 @@
@NoArgsConstructor
@DiscriminatorColumn
public abstract class Question extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "question_id")
private Long id;

@OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Comment> comments;

public boolean ifApproved;
protected String content;
@Enumerated(value = EnumType.STRING)
Expand All @@ -44,6 +36,12 @@ public abstract class Question extends BaseEntity {
protected QuestionLevel questionLevel;
protected String description;
protected String imageUrl;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "question_id")
private Long id;
@OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Comment> comments;

public Question(String content, QuestionCategory questionCategory, QuestionLevel questionLevel, String description,
String imageUrl) {
Expand Down
Loading

0 comments on commit 5be6899

Please sign in to comment.