public (bool, int) CheckQuizResults(QuizInputModel input, QuizViewModel realQuiz) { var isPassed = true; var correctAnswers = 0; for (int i = 0; i < input.Questions.Count; i++) { var question = input.Questions[i]; var userQuestion = realQuiz.Questions[i]; for (int j = 0; j < question.Answers.Count; j++) { var quizAnswer = question.Answers[j]; var userAnswer = userQuestion.Answers[j]; if (quizAnswer.IsCorrectAnswer != userAnswer.IsCorrectAnswer) { isPassed = false; } else if (userAnswer.IsCorrectAnswer == true) { correctAnswers++; } } } return(isPassed, correctAnswers); }
public async Task <IActionResult> Make() { var model = new QuizInputModel() { Quiz = await this.quizService.GetQuizAsync <QuestionQuizViewModel>(), SkinProblems = await this.skinProblemsService.GetAllAsync <SkinProblemViewModel>(), }; return(this.View(model)); }
public void BulkAddUserAnswer(QuizInputModel quizInputModel) { var userAnswers = new List <UserAnswer>(); foreach (var item in quizInputModel.Questions) { var userAnswer = new UserAnswer { IdentityUserId = quizInputModel.UserId, AnswerId = item.AnswerId, }; userAnswers.Add(userAnswer); } this.applicationDbContext.UsersAnswers.AddRange(userAnswers); this.applicationDbContext.SaveChanges(); }
public async Task <IActionResult> Submit(QuizInputModel input, string id) { var quizFromDb = await this.quizService.GetQuizByIdAsync(id); var userId = this.userManager.GetUserId(this.User); var result = this.resultsService.CheckQuizResults(input, quizFromDb); if (this.resultsService.UserHasPassedQuizWithId(id, userId)) { quizFromDb.Trophies = -1; } var resultId = await this.resultsService.AddResultAsync(result.Item1, quizFromDb.Id, quizFromDb.Trophies, userId, result.Item2); return(this.RedirectToAction("QuizResult", "Quizes", new { resultId })); }
public async Task <IActionResult> Create(QuizInputModel input) { string picturePath = null; if (input.Picture != null) { if (!(input.Picture.FileName.EndsWith(".png") || input.Picture.FileName.EndsWith(".jpeg") || input.Picture.FileName.EndsWith(".jpg"))) { this.ModelState.AddModelError("Picture", "Picture must be file with extension jpeg, jpg png"); } if (input.Picture.Length > 10 * 102 * 1024) { this.ModelState.AddModelError("Picture", "Picture is too large - Max 10Mb"); } picturePath = await CloudinaryService .UploadPicture(this.cloudinary, input.Picture, input.Name.Replace(" ", "") + this.userManager.GetUserId(this.User), GlobalConstants.CloudinaryQuizFolder); } if (!this.ModelState.IsValid) { return(this.View()); } var userId = this.userManager.GetUserId(this.User); input.CreatorId = userId; input.PicturePath = picturePath; var quizId = await this.quizService.CreateQuizAsync(input); if (quizId == null) { return(this.View()); } await this.quizService.UpdateQuizTrophiesAsync(quizId); return(this.RedirectToAction("Create", "Questions", new { id = quizId })); }
public void BulkAddUserAnswer(QuizInputModel quizInputModel) { var userAnswers = new List <UserAnswer>(); foreach (var question in quizInputModel.Questions) { var userAnswer = new UserAnswer { IdentityUserId = quizInputModel.UserId, AnswerId = question.AnswerId, QuestionId = question.QuestionId }; userAnswers.Add(userAnswer); } this.dbContext.AddRange(userAnswers); this.dbContext.SaveChanges(); }
public async Task <string> CreateQuizAsync(QuizInputModel input) { var category = this.categoriesRepo.All().Where(x => x.Title == input.Category.ToString()).FirstOrDefault(); if (category == null) { throw new Exception("Category does not exist!"); } var picture = new Picture() { Url = input.PicturePath }; if (input.PicturePath == null) { picture.Url = GlobalConstants.DefaultQuizPicturePath; } var quiz = new Quiz { CreatorId = input.CreatorId, Name = input.Name, Description = input.Description, Picture = picture, TotalTimeToComplete = input.TotalTimeToComplete, CategoryId = category.Id, Trophies = GlobalConstants.InitialQuizTrophies, }; quiz.QuizTag = await this.tagsService.CreateTagsAsync(input.Tags, quiz.Id, category.Id, quiz); await this.quizesRepo.AddAsync(quiz); await this.quizesRepo.SaveChangesAsync(); return(quiz.Id); }
public void CheckQuizResultShouldReturnTrueIFPassedAndNumberOfCorrectAnswers() { var quizViewModel = new QuizViewModel(); quizViewModel.Questions = new List <QuestionViewModel>(); var question = new QuestionViewModel() { QuestionText = "Question test", }; var answer = new AnswerViewModel() { AnswerText = "A", QuestionId = question.Id, IsCorrectAnswer = true, }; var anotherAnswer = new AnswerViewModel() { AnswerText = "B", QuestionId = question.Id, IsCorrectAnswer = false, }; question.Answers = new List <AnswerViewModel>(); question.Answers.Add(answer); question.Answers.Add(anotherAnswer); quizViewModel.Questions.Add(question); var questionInput = new QuestionInputModel() { QuestionText = "B??", QuizId = "123", }; var firstNewAnswer = new AnswerInputModel() { AnswerText = "A", IsCorrectAnswer = true, }; var secondNewAnswer = new AnswerInputModel() { AnswerText = "B", IsCorrectAnswer = false, }; questionInput.Answers = new List <AnswerInputModel>(); questionInput.Answers.Add(firstNewAnswer); questionInput.Answers.Add(secondNewAnswer); var quizInputModel = new QuizInputModel(); quizInputModel.Questions = new List <QuestionInputModel>(); quizInputModel.Questions.Add(questionInput); var result = this.Service.CheckQuizResults(quizInputModel, quizViewModel); Assert.True(result.Item1); Assert.Equal(1, result.Item2); }