퀴즈 문제를 만들고 문제를 푸는 사이트를 만드는데
퀴즈 상세조회를 클릭하면 답안이 계속 반복해서 저장되는 현상이 생겼다.
<QuizService>
public List<String> answerList = new ArrayList<>();
// 퀴즈 등록
@Transactional
public BasicResponseDto<?> register(QuizRequestDto quizRequestDto, User user) {
quizRepository.save(new Quiz(quizRequestDto, user.getUserId()));
return BasicResponseDto.setSuccess("퀴즈 등록 성공!", null);
}
// 개별 퀴즈 조회
@Transactional(readOnly = true)
public SolvingQuizResponseDto findById(Long id, User user) {
Quiz quiz = quizRepository.findById(id).orElseThrow(()-> new IllegalArgumentException("해당 퀴즈가 없습니다."));
answerList.add(quiz.getCorrect());
if (quiz.getIncorrect1()!=null) {answerList.add(quiz.getIncorrect1());}
if (quiz.getIncorrect2()!=null) {answerList.add(quiz.getIncorrect2());}
if (quiz.getIncorrect3()!=null) {answerList.add(quiz.getIncorrect3());}
if(answerList.size() > 2) {
Collections.shuffle(answerList);
}
// SolvingQuizResponseDto solvingQuizResponseDto = new SolvingQuizResponseDto(id, quiz.getTitle(), quiz.getContent(), answerList, user.getUserId());
//
// return BasicResponseDto.setSuccess(null, solvingQuizResponseDto);
return new SolvingQuizResponseDto(id, quiz.getTitle(), quiz.getContent(), answerList, user.getUserId());
}
코드를 좀 더 깔끔하고 직관적이게 적고 싶어 계속해서 리펙토링을 하다 보니 어느 한 곳이 잘못된것같았다.
@Transactional(readOnly = true)
public SolvingQuizResponseDto findById(Long id, User user) {
Quiz quiz = quizRepository.findById(id).orElseThrow(()-> new IllegalArgumentException("해당 퀴즈가 없습니다."));
answerList.clear(); // 중복으로 저장되는 것 방지
answerList.add(quiz.getCorrect());
if (quiz.getIncorrect1()!=null) {answerList.add(quiz.getIncorrect1());}
if (quiz.getIncorrect2()!=null) {answerList.add(quiz.getIncorrect2());}
if (quiz.getIncorrect3()!=null) {answerList.add(quiz.getIncorrect3());}
if(answerList.size() > 2) {
Collections.shuffle(answerList);
}
answerList 를 저장은 계속하고 리셋이 되지 않은 문제였다.
그래서 clear로 한번 저장 후 리셋 시켜주는 작업을 추가하였더니 해결되었다 ㅎㅎ
'코딩 공부' 카테고리의 다른 글
CICD 과정 중 자동배포에 코드 수정 시 업데이트 안되는 오류 (0) | 2023.06.06 |
---|---|
swagger import 안됨 (0) | 2023.05.15 |
미니프로젝트_BasicResponseDto 활용하기 (0) | 2023.05.07 |
미니프로젝트_트러블슈팅1(퀴즈문제내기 답null 값 안나타나게하기) (0) | 2023.05.06 |
Security 회원가입 오류 (0) | 2023.05.04 |