Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

공hannah부

E-day 프로젝트 - 퀴즈 정답 확인 API(3) 본문

프로젝트/EFUB Eday

E-day 프로젝트 - 퀴즈 정답 확인 API(3)

Hannah0226 2023. 7. 23. 02:44

해야할 것!

  • 어제 했던 MemberTitle뿐만 아니라 MemberQuiz도 정답을 맞출시  isCorrect를 true로 바꿔주어야 한다

MemberQuiz Entity 만들어 주기

Quiz와 MemberQuiz 연관관계

1. MemberQuiz 엔티티

@Setter
@Entity
public class MemberQuiz {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "member_quiz_id")
	private Integer id;

	@Column(nullable = false)
	private Boolean isCorrect;

	@ManyToOne
	@JoinColumn(name = "member_id", nullable = false)
	private Member member;

	@ManyToOne
	@JoinColumn(name = "quiz_id", nullable = false)
	private Quiz quiz;

	@Builder
	public MemberQuiz(boolean isCorrect, Member member, Quiz quiz){
		this.isCorrect = isCorrect;
		this.member = member;
		this.quiz = quiz;
	}
}

MemberQuiz의 isCorrect 값 true로 변경하기

1. MemberQuizRepository

  • 특정 회원과 퀴즈에 해당하는 MemberQuiz 엔티티 조회
@Repository
public interface MemberQuizRepository extends JpaRepository <MemberQuiz, Long> {
    Optional<MemberQuiz> findByMemberAndQuiz(Member member, Quiz quiz);
}

 

2. QuizService

  • 퀴즈 정답 확인 메소드
    • 회원과 퀴즈로 MemberQuiz 엔티티 조회 후 MemberQuiz의 isCorrect 값 true로 변경
public boolean checkAnswer(int d_day, int optionNumber, Long memberId) {
		Quiz quiz = findQuiz(d_day);

		boolean isCorrect = quiz.isAnswerOption(optionNumber);

		if (isCorrect) {
			Member member = memberRepository.findById(memberId)
				.orElseThrow(() -> new IllegalArgumentException("해당 멤버를 찾을 수 없습니다."));
			Integer subjectId = quiz.getSubject().getId();
			Title title = titleRepository.findBySubjectId(subjectId)
				.orElseThrow(() -> new IllegalArgumentException("해당 subject_id에 대한 타이틀을 찾을 수 없습니다."));
			MemberTitle memberTitle = memberTitleRepository.findByMemberAndTitle(member, title)
				.orElseThrow(() -> new IllegalArgumentException("해당 멤버 타이틀을 찾을 수 없습니다."));
			// 회원과 퀴즈로 MemberQuiz 엔티티 조회
			MemberQuiz memberQuiz = memberQuizRepository.findByMemberAndQuiz(member, quiz)
				.orElseThrow(() -> new IllegalArgumentException("해당 멤버 퀴즈를 찾을 수 없습니다."));

			if (!memberTitle.getGetTitle()) {
				member.setLevel(member.getLevel() + 1);
			}
			memberTitle.setGetTitle(true);

			//MemberQuiz의 isCorrect 값 true로 변경
			memberQuiz.setIsCorrect(true);

		}
		return isCorrect;
	}