공hannah부
E-day 프로젝트 - 퀴즈 정답 확인 API(1) 본문
구현해야 할 것!
- 옵션을 선택해 Request를 보내면 해당 옵션이 정답일시 true와 문제의 해설을 반환하고, 정답이 아닐 시 false와 null값을 보내기
API 명세서
- 퀴즈 정답을 확인하는 api
- URI: /quiz/{d_day}
- RequestBody
{
"optionId" : 2
}
- Success Response
{
"isAnswer" : true,
"quizDescripiton" : "이화여자대학교의 대표 색상은 초록색, 즉 이화그린이에요! 1908년에 배꽃의 녹색 잎새를 상징하는 학교색으로 지정되었다고 합니다:)"
}
{
"isAnswer" : false,
"quizDescription": null
}
퀴즈 선지 번호 Column 추가 (정답 비교용)
API를 작성하기 전에 request 받은 optionId가 정답인지 아닌지 비교할 퀴즈 선지 번호 Column을 추가해 주어야 한다.
해당 엔티티는 INT 타입으로 하며, 각 퀴즈별로 옵션에 1부터 3까지 번호를 부여해 response 받는 숫자와 비교한다.
ERD (퀴즈선지번호 / OptionNumber 추가)
quiz_option DB
Options 엔티티
- optionNumber 추가
@Entity
@Getter
@NoArgsConstructor
@Table(name = "quiz_option")
public class Option {
//... (생략)
@Column(nullable = false)
private Integer optionNumber;
@Builder
public Option(String content, Boolean isAnswer, Quiz quiz, int optionNumber) {
this.content = content;
this.isAnswer = isAnswer;
this.quiz = quiz;
this.optionNumber = optionNumber;
}
}
QuizService
- DB에 저장되어 있는 optionNumber를 사용해 request에서 받은 option_id와 비교하여 해당 옵션의 isAnswer(정답여부)를 반환한다.
//퀴즈 정답 확인
public boolean checkAnswer(int d_day, int option_id){
Quiz quiz = findQuiz(d_day);
for (Options option : quiz.getOptionsList()) {
if (option.getOptionNumber() == option_id) {
return option.getIsAnswer();
}
}
}
작성한 퀴즈 정답 확인 API
1. QuizService
- 퀴즈 정답 확인 메서드
- 주어진 d_day에 해당하는 퀴즈를 조회 한 후, 퀴즈 선택지들을 순회하며 해당 퀴즈DB에 저장되어 있는 OptionNumber(퀴즈 선택지 번호)와 request에서 받은 option_id가 일치하는 선택지를 찾는다.
- 일치한다면 isAnswer(정답 여부)를 반환하고, 잘못된 선택지 id인 경우 예외를 발생시킨다.
- 퀴즈 설명 가져오기 메소드
- 주어진 d_day에 해당하는 퀴즈를 조회한 후, 퀴즈의 설명을 반환한다.
//퀴즈 정답 확인
public boolean checkAnswer(int d_day, int option_id){
Quiz quiz = findQuiz(d_day);
for (Options option : quiz.getOptionsList()) {
if (option.getOptionNumber() == option_id) {
return option.getIsAnswer();
}
}
throw new IllegalArgumentException("올바르지 않은 optionId입니다.");
}
// 퀴즈 설명 가져오기
public String getQuizDescription(int d_day) {
Quiz quiz = findQuiz(d_day);
return quiz.getDescription();
}
2. QuizController
- 퀴즈 정답 확인 메서드
- 주어진 d_day와 선택한 선택지 id를 통해 퀴즈 정답을 확인하고 정답인 경우, 퀴즈 설명을 가져온다.
- 그 후, 퀴즈 정답 여부와 퀴즈 설명을 포함하는 응답 dto를 생성하여 반환한다.
// 퀴즈 정답 확인
@PostMapping
public QuizAnswerResponseDto checkAnswer(
@PathVariable int d_day,
@RequestBody QuizRequestDto quizRequestDto
) {
boolean isCorrect = quizService.checkAnswer(d_day, quizRequestDto.getOptionId());
String quizDescription = null;
if (isCorrect) {
quizDescription = quizService.getQuizDescription(d_day);
}
QuizAnswerResponseDto responseDto = new QuizAnswerResponseDto(isCorrect, quizDescription);
return responseDto;
}
3. QuizRequestDto
- 퀴즈 정답 확인 요청에 대한 요청 데이터를 담는 DTO
@Getter
@Setter
@NoArgsConstructor
public class QuizRequestDto {
private int optionId; // 선택한 선택지의 ID
}
4. QuizAnswerResponseDto
- 퀴즈 정답 확인 요청에 대한 응답 데이터를 담는 DTO
@Getter
@Setter
@NoArgsConstructor
public class QuizAnswerResponseDto {
private boolean isAnswer;
private String quizDescription;
public QuizAnswerResponseDto(boolean isAnswer, String quizDescription) {
this.isAnswer = isAnswer;
this.quizDescription = quizDescription;
}
}
Postman 실행 결과
'프로젝트 > EFUB Eday' 카테고리의 다른 글
E-day 프로젝트 - 퀴즈 정답 확인 API(3) (0) | 2023.07.23 |
---|---|
E-day 프로젝트 - 퀴즈 정답 확인 API(2) (0) | 2023.07.22 |
E-day 프로젝트 - 퀴즈 내용 보기 API (0) | 2023.07.20 |
E-day 프로젝트 - 기획안 (0) | 2023.07.20 |
Docker 실행 및 오류 정리 (0) | 2023.07.16 |