Игра-викторина - создайте вопросы, ответы и историю для администраторов - PullRequest
0 голосов
/ 01 марта 2019

Я работаю над игрой, в которой есть два типа пользователей;Администратор и пользователь, поэтому администратор может генерировать столько вопросов, сколько он хочет, поэтому эти вопросы могут быть NORMAL, MULTICHOICE, BINARI, SMALL_DESCRIPTION, поэтому каждый раз, когда администратор хочет создать один, он должен решить, какой тип ответа хочет на этот вопрос, а также тему этогоВопрос (это может быть подтема).

Он может создать Викторину, способ создать Викторину состоит в том, что он должен выбрать вопросы, которые он создал ранее.

Также он может проверять историю пользователя, что означает, что при вызове конечной точки он должен иметь возможность проверить вопросы, которые задал этот пользователь (с оценкой, какой вопрос не удался, что он ответил).

Теперь у меня есть классы Question и Answer, но я застрял с вопросом о генерации вопроса с ответом, назначенным для темы, а затем с созданием викторины, потому что я пропустил также пользователя в обеих частях., чтобы узнать, какой пользователь создал вопрос / викторину и какой пользователь ответил на вопрос / викторину, и сохранить некоторые данные для ведения истории.

Мой класс вопросов имеет:

@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 темы / подтемы.и этот вопрос можно отнести к этому.

Что вы имеете в виду под "историческим"?

Ну, это что-то для стороны администратора, у администратора должна быть конечная точка, которая с идентификатором или именем пользователя возвращает все вопросы викторины (первая конечная точка) или все вопросы (вторая конечная точка), которыепользователь сделал, с оценкой, количество неудач / количество правильных, но мне интересно, что это должен быть внешний интерфейс, чтобы выполнить вычисления, я имею в виду, что конечная точка возвращает всю эту информацию, итого вопросов / тестов выполнено, Оценка, какой вопрос не удалось, и т. Д., А затем во внешнем интерфейсе сделать больше расчетов.

1 Ответ

0 голосов
/ 09 марта 2019

Извините, я не ставлю аннотации к ответу.Вы понимаете их.Все являются сущностями.Нет необходимости в объекте «Ответ», или это зависит от типа вашего вопроса.У них есть собственные классы и пользовательские формы для их заполнения.Есть пример для мультивыборов.

Вы можете управлять тем, кто может создавать викторины из контроллера.Вы можете добавить Quiz к своей сущности User: List<Quiz> myQuizesAsAdmin; List<Quiz> myQuizesAsAnswerer;

Вы можете просмотреть историю из запроса сущности User;фильтруйте и сортируйте их, используя List<Quiz> myQuizesAsAnswerer; Вы также можете добавить классы для школьного класса и добавить тесты, что они должны делать.

Как кодировать: Администратор создает Quiz myQuiz = new Quiz(name, QuizId, Questions, StartDate, EndDate, etc...)

Теперь у вас есть оригинальная Викторина, поэтому вы должны сделать ее копию или клонировать с уникальным идентификатором.Я добавил конструктор в Quiz.class, чтобы сделать это.Quiz iDoThisQuiz = new Quiz (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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...