예제 #1
0
        public IActionResult GetScore(int scoreId)
        {
            var score = this.Uow.ScoreRepository.GetByID(scoreId);

            ThrowIf.NotFound(score, scoreId);
            return(Ok(score));
        }
예제 #2
0
        /// <summary>
        /// Answers specified quiz question.
        /// </summary>
        /// <param name="question">The question to answer.</param>
        /// <param name="answerTemplateId">The answer template identifier.</param>
        public void AnswerQuestion(Question question, int answerTemplateId)
        {
            ThrowIf.Null(question, nameof(question));
            ThrowIf.Completed(question.Quiz);

            if (question.IsAnswered)
            {
                throw new QuizFlowException(
                          QuizFlowErrorCodes.QuestionAlreadyAnswered,
                          "Question already answered.");
            }

            QuestionTemplate questionTemplate = this.Uow.QuestionTemplateRepository
                                                .GetByID(question.TemplateId);

            ThrowIf.NotFound(questionTemplate, question.TemplateId);

            AnswerTemplate answerTemplate = questionTemplate.GetAnswer(answerTemplateId);

            ThrowIf.NotFound(answerTemplate, answerTemplateId);

            var answer = new Answer()
            {
                TemplateId = answerTemplateId,
                IsCorrect  = answerTemplate.IsCorrect
            };

            question.Answers.Add(answer);
            question.DateEnd = DateTime.Now;
            this.Uow.Save();
        }
예제 #3
0
        public IActionResult GetQuiz(int quizId)
        {
            var quiz = this.Uow.QuizRepository.GetByID(quizId);

            ThrowIf.NotFound(quiz, quizId);

            return(Ok(quiz));
        }
예제 #4
0
        public IActionResult GetQuizScore(int quizId)
        {
            var score = this.Uow.ScoreRepository.GetQuizScore(quizId);

            ThrowIf.NotFound(score);

            return(Ok(score));
        }
예제 #5
0
        public IActionResult CompleteQuiz(int quizId)
        {
            Quiz quiz = this.Uow.QuizRepository.GetByID(quizId);

            ThrowIf.NotFound(quiz, quizId);

            this.QuizFlowManager.CompleteQuiz(quiz);
            return(Ok());
        }
예제 #6
0
        public IActionResult GetNextQuestion(int quizId)
        {
            Quiz quiz = this.Uow.QuizRepository.GetByID(quizId);

            ThrowIf.NotFound(quiz, quizId);

            QuizFlowCommandContract command = this.QuizFlowManager.GetNextQuestion(quiz);

            return(Ok(command));
        }
예제 #7
0
        public IActionResult Start([FromQuery] int templateId)
        {
            QuizTemplate quizTemplate = this.Uow.QuizTemplateRepository.GetByID(templateId);

            ThrowIf.NotFound(quizTemplate, templateId);

            Quiz quiz = this.QuizFlowManager.StartNewQuiz(quizTemplate);

            return(Ok(quiz));
        }
예제 #8
0
        public IActionResult AnswerQuestion(int quizId, int questionId, [FromQuery] int answerTemplateId)
        {
            Quiz quiz = this.Uow.QuizRepository.GetByID(quizId);

            ThrowIf.NotFound(quiz, quizId);

            Question question = quiz.GetQuestion(questionId);

            ThrowIf.NotFound(question, questionId);

            this.QuizFlowManager.AnswerQuestion(question, answerTemplateId);
            return(Ok());
        }
예제 #9
0
        public IActionResult GetQuizTemplate(int quizTemplateId)
        {
            var quizTemplate = this.Uow.QuizTemplateRepository.GetByID(quizTemplateId);

            ThrowIf.NotFound(quizTemplate, quizTemplateId);

            var questionTemplateCount = this.Uow.QuizTemplateRepository
                                        .GetQuestionTemplateCount(quizTemplateId);

            var quizTemplateDetails = new QuizTemplateDetailsContract(quizTemplate, questionTemplateCount);

            return(Ok(quizTemplateDetails));
        }