Exemplo n.º 1
0
        public async Task <bool> SaveAnswersToQuiz(ResponseToQuiz responseToQuiz)
        {
            _quizesAnswers = database.GetCollection <ResponseToQuiz>(responseToQuiz.classId + "_quizesAnswers");
            _quizes        = database.GetCollection <Quiz>(responseToQuiz.classId + "_quizes");

            var quiz = await _quizes.Find <Quiz>(x => x.Id == responseToQuiz.quizId).FirstOrDefaultAsync();

            if (quiz.executonersId.Contains(responseToQuiz.executonerId))
            {
                return(false);
            }

            await _quizesAnswers.InsertOneAsync(responseToQuiz);

            quiz.executonersId.Add(responseToQuiz.executonerId);

            await _quizes.FindOneAndReplaceAsync(x => x.Id == quiz.Id, quiz);

            return(true);
        }
Exemplo n.º 2
0
        public async Task <IActionResult> CompleteQuiz(CompleteQuizDTO completeQuiz)
        {
            //Dodac: brak mozliwosci wysylania odpowiedzi przez nauczyciela,
            //sprawdzenie startDate, ID zamiast Id
            string token = HttpContext.Request.Headers["Authorization"];

            token = token.Replace("Bearer ", string.Empty);

            var id = _tokenHelper.GetIdByToken(token);

            int correctAnswersAmount = 0;

            var isUserInClass = await _apiHelper.DoesUserBelongToClass(id, completeQuiz.classId);

            if (!isUserInClass)
            {
                error.Err  = "Nie należysz do tej klasy";
                error.Desc = "Wprowadź poprawne ID klasy i quizu";
                return(NotFound(error));
            }

            var usr = await _apiHelper.ReturnUserByID(id);

            if (usr.userRole == 1)
            {
                error.Err  = "Nie możesz odesłać quizu.";
                error.Desc = "Jako nauczyciel nie możesz odesłać quizu.";
                return(NotFound(error));
            }

            var quiz = await _apiHelper.ReturnQuizById(completeQuiz.classId, completeQuiz.quizId);

            if (quiz == null)
            {
                error.Err  = "Nie znaleziono quizu o podanym ID";
                error.Desc = "Wprowadź poprawne ID klasy i quizu";
                return(NotFound(error));
            }

            var questions = await _apiHelper.ReutrnCorrectQuizQuestions(completeQuiz.classId, completeQuiz.quizId);

            if (DateTime.Compare(quiz.FinishDate, DateTime.Now) < 0)
            {
                error.Err  = "Nie mozesz wyslac odpowiedzi do quizu.";
                error.Desc = "Czas na odsylanie odpowiedzi minął.";
                return(NotFound(error));
            }

            if (DateTime.Compare(quiz.StartDate, DateTime.Now) > 0)
            {
                error.Err  = "Nie mozesz wyslac odpowiedzi do quizu.";
                error.Desc = "Quiz się nie rozpoczął.";
                return(NotFound(error));
            }

            if (completeQuiz.answers.Count != quiz.amountOfQuestions)
            {
                error.Err  = "Nie mozesz wyslac odpowiedzi do quizu.";
                error.Desc = "Nie odpowiedziałeś na wszystkie pytania.";
                return(NotFound(error));
            }

            for (int i = 0; i < questions.Questions.Count; i++)
            {
                var question = questions.Questions[i];
                if (completeQuiz.answers[i] == question.correctAnswer)
                {
                    correctAnswersAmount++;
                }
            }

            ResponseToQuiz responseToQuiz = new ResponseToQuiz();

            responseToQuiz.correctAnswers             = correctAnswersAmount;
            responseToQuiz.executonerId               = id;
            responseToQuiz.classId                    = completeQuiz.classId;
            responseToQuiz.FinishDate                 = DateTime.Now;
            responseToQuiz.percentageOfCorrectAnswers = (double)correctAnswersAmount / questions.Questions.Count * 100;
            responseToQuiz.quizId = quiz.Id;

            bool isAnswerCorrect = await _apiHelper.SaveAnswersToQuiz(responseToQuiz);

            if (!isAnswerCorrect)
            {
                error.Err  = "Nie mozesz wyslac odpowiedzi do quizu.";
                error.Desc = "Już raz je przesłałeś.";
                return(NotFound(error));
            }

            CompleteQuiz completeQuizToReturn = new CompleteQuiz();

            completeQuizToReturn.PercentageOfCorrectAnswers = responseToQuiz.percentageOfCorrectAnswers;

            return(Ok(completeQuizToReturn));
        }