복붙노트

[SPRING] 퀴즈 게임 - 관리자를위한 질문, 답변 및 기록 만들기

SPRING

퀴즈 게임 - 관리자를위한 질문, 답변 및 기록 만들기

저는 두 가지 유형의 사용자가있는 게임을 작업하고 있습니다. 관리자 및 사용자가 관리자가 원하는만큼의 질문을 생성 할 수 있으므로 해당 질문은 정상, 다중, 비 나리, SMALL_DESCRIPTION이 될 수 있으므로 관리자가 하나를 만들려고 할 때마다 어떤 유형의 대답이이 질문에 대한 것인지 결정해야합니다. 이 질문의 주제 (하위 주제 일 수 있음)

그는 퀴즈를 생성 할 수 있습니다. 퀴즈를 생성하는 방법은 이전에 만든 질문을 선택해야한다는 것입니다.

또한 그는 사용자의 기록을 검사 할 수 있습니다. 즉, 엔드 포인트 호출을 통해 해당 사용자가 수행 한 질문 (점수, 실패한 질문, 응답 한 내용)을 확인할 수 있어야합니다.

나는 지금부터 클래스 질문과 답변을 가지고 있지만 질문과 답변을 주제로 할당 된 다음 질문을 생성 한 사용자를 파악하기 위해 두 부분 모두에서 사용자가 누락되어 퀴즈를 생성합니다. 어떤 사용자가 질문 / 퀴즈에 응답하고 과거 데이터를 저장하기 위해 일부 데이터를 저장했는지 확인합니다.

내 질문 클래스는 다음과 같습니다.

@Entity(name="question")
public class Question extends DateAudit {
@Id
@Column(name = "question_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "question_seq")
@SequenceGenerator(name = "question_seq", allocationSize = 1)
private Long id;

@Column(name = "text_question")
private String textQuestion; //The question itself "What's the name of ..."

@Column(name = "answerDescription")
@NotBlank(message = "Answer description")
private String answerDescription; //The answer to the question as an explanation

@Column(name = "isExamQuestion", nullable = false) 
private Boolean isExamQuestion; //A flag for the user to filter when he wants to do a question he only will see those that are not isExamQuestion, isExamQuestion are the questions that are going to appear when he wants to create a Quiz

@OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
private Set<Answer> answers; //List of answers...

@Column(name = "answer_type", nullable = false) 
private String answerType; //I don't know if it goes here, but the answerType mentioned before NORMAL,MULTICHOICE,.... is to render on the user app

그리고 대답

@Entity(name = "answer")
public class Answer extends DateAudit {

    @Id
    @Column(name = "answer_id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "answer_seq")
    @SequenceGenerator(name = "answer_seq", allocationSize = 1)
    private Long id;

    @Column(name = "answerToQuestion") 
    @NotBlank(message = "Answer to question name can not be blank") 
    private String answerToQuestion; //If the questions is what's 2*2 this could be 3

    @ManyToOne 
    private Question question; //In what question appear that answer

    //Here I'm wondering if I have to add a flag saying isCorrect to detect if it's the correct answer or not

보시다시피 주제 항목, 역사 및 퀴즈가 누락 된 것을 볼 수 있으며 어떤 사용자가 질문을했는지 또는 퀴즈를 풀 었는지 또는 퀴즈 / 질문을 해결했는지 어떻게 알 수 있습니까?

내가받은 질문 :

동일한 질문이나 퀴즈가 다른 사용자에게 응답 될 수 있습니다. 즉, Q1은 40 명의 사용자가 할 수 있습니다.

퀴즈를 만들 때 주제를 선택하여 해당 주제를 선택하십시오. 예 : 퀴즈 만들기 (합계) 퀴즈에 넣을 질문을 선택할 수 있도록 주제별로 필터링해야합니다. 수학 및 하위 토픽 합계로 필터링해야합니다.

관리자는 주제 또는 하위 주제를 만들 끝점을 가져야합니다. 지금부터는 하위 주제 만 있고, 하위 주제의 하위 주제는 없습니다. 주제는 다음과 같습니다. 수학 하위 주제 : 제곱근. 따라서 질문이나 퀴즈를 만들기 전에 관리자는 먼저 주제를 만들어야하고 하위 주제를 추가하려면 하나를 만들고 싶으면 질문을 만들려고 할 때 X라는 주제 / 하위 주제에있는 질문이라고 말할 수 있습니다. 그 질문은 그것에 배정 될 수 있습니다.

관리자 측에는 관리자가 있어야합니다. 관리자는 사용자의 ID 또는 이름을 사용하여 사용자가 수행 한 모든 퀴즈 (첫 번째 엔드 포인트) 또는 모든 질문 (두 번째 엔드 포인트)을 점수와 함께 반환해야합니다. 실패의 숫자 / 올바른 사람의 숫자,하지만이 프런트 엔드 쪽 계산해야합니까, 내 말은, 끝점이 정보를 모두 반환해야 궁금하네요, 총 질문 / 퀴즈, 점수, 어떤 질문에 실패했습니다 등 .. 그리고 프론트 엔드에서 더 많은 계산을하십시오.

해결법

  1. ==============================

    1.죄송합니다. 답안에 주석을 달지 않습니다. 너는 그들을 알아 낸다. 모두 엔티티입니다. Answer 엔티티가 필요하지 않거나 질문 유형을 나타냅니다. 그들 자신의 수업과 그것을 채우기위한 사용자 양식을하십시오. 다중 선택의 예가 있습니다.

    죄송합니다. 답안에 주석을 달지 않습니다. 너는 그들을 알아 낸다. 모두 엔티티입니다. Answer 엔티티가 필요하지 않거나 질문 유형을 나타냅니다. 그들 자신의 수업과 그것을 채우기위한 사용자 양식을하십시오. 다중 선택의 예가 있습니다.

    컨트롤러에서 퀴즈를 만들 수있는 사람을 관리 할 수 ​​있습니다. 사용자 엔티티에 퀴즈를 추가 할 수 있습니다. List myQuizesAsAdmin; List myQuizesAsAnswerer;

    사용자 엔터티 쿼리의 기록을 볼 수 있습니다. List myQuizesAsAnswerer를 사용하여 필터 및 정렬; 또한 학교 수업과 같은 수업을 추가하고 Quiz가해야 할 일을 추가 할 수 있습니다.

    코드 작성 방법 : 관리자가 퀴즈 만들기 myQuiz = 새 퀴즈 (이름, QuizId, 질문, 시작 날짜, 종료 날짜 등)

    이제 당신은 원래의 퀴즈를 가졌으므로 고유 한 ID의 복사본이나 복제본을 만들었습니다. 그것을하기 위해 Quiz.class에 생성자를 추가했습니다. 퀴즈 iDoThisQuiz = 새로운 퀴즈 (this.QuizRepository.findByQuizIdAndByOriginal (thisQuisId, true)); 이제 답변자는 퀴즈를 풀고 질문에 답할 수 있습니다. 작성한 후 데이터베이스에 저장하십시오. 이제 데이터베이스에 "원래 퀴즈"가 있고 그 사본에 응답 된 퀴즈가 있습니다.

        public class Quiz {
                   private String name;
                   private boolean original;
                   private long id; // This is unique for every entity
                   private String quizId; // this is for this quiz general id. Like a name. Unique for this quiz.
                   private List<Question> questions;
                   private User answerer;
                   private User admin;
                   private Date endDateToDoDate; // and another dates like when it has been done.
                   private double totalPoints; // If you want to on
    
            }
    public Quiz(Quiz originalQuiz) {
         this.id= this has to be unique, autogenerated or what you use to generate ids. 
         this.quizId = originalQuiz.quizId;
         this.name = originalQuiz.name;
         this.question = new Question(originalQuiz.question);
         this.original = false;
         ... 
    

    --

    @Entity(name = "question")
    public class Question extends DateAudit {
        @Id
        @Column(name = "question_id")
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "question_seq")
        @SequenceGenerator(name = "question_seq", allocationSize = 1)
        private Long id;
        private boolean isAnswered;
    
        /* TOPIC AND SUBTOPIC, create class Topic. */
        private Topic topic;
        private Topic subtopic; //Or you have a subtopic in Topic class
    
        @Column(name = "text_question")
        private String textQuestion; // The question itself "What's the name of ..."
    
        /* question types. All have to have their own class. When admin create quetion he will add one question type --  setMultiChoice()
         * Another ones are NULL so when you create answer form it selects that what is not NULL */
        private MultiChoise multiChoise;
        private NormalQuestion normalQuestion;
        /* etc question types */
    
        @Column(name = "answerDescription")
        @NotBlank(message = "Answer description")
        private String answerDescription; // The answer to the question as an explanation
    
        @Column(name = "isExamQuestion", nullable = false)
        private Boolean isExamQuestion; // A flag for the user to filter when he wants to do a question he only will see
                                        // those that are not isExamQuestion, isExamQuestion are the questions that are
                                        // going to appear when he wants to create a Quiz
    
    
    }
    
    
    
    @Entity
    public class MultiChoice extends Points{
        private List<TextAndBoolean> choices;
        private boolean answered;
    
    }
    
    
    
     public class Points {
        private double points;
    
    }
    
    
    public class TextAndBoolean {
        private String text;
        private boolean selected;
    
    }
    
  2. from https://stackoverflow.com/questions/54950130/quiz-game-create-questions-answers-and-historical-for-admins by cc-by-sa and MIT license