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); }
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)); }