public async Task <bool> CalculateQuizResultAsync(UserAnswerViewModel userAnswerViewModel, CancellationToken cancellationToken = default) { using (SqlConnection connection = new SqlConnection(DefaultDataConfig.ConnectionString)) { int insertedRecord = 0; try { SqlCommand command = new SqlCommand("usp_insertUserQuizResult", connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue("@TotalQuestion", userAnswerViewModel.TotalQuestion); command.Parameters.AddWithValue("@TotalAttempted", userAnswerViewModel.TotalAttempted); command.Parameters.AddWithValue("@TotalCorrect", userAnswerViewModel.TotalCorrect); command.Parameters.AddWithValue("@UserId", userAnswerViewModel.UserId); command.Parameters.AddWithValue("@QuizId", userAnswerViewModel.QuizId); connection.Open(); insertedRecord = await command.ExecuteNonQueryAsync(cancellationToken); return(true); } catch (Exception ex) { Console.WriteLine(ex); } finally { connection.Close(); } return(false); } }
/// <summary> /// Получить список ответов пользователя. /// </summary> /// <returns></returns> public UserAnswerListViewModel Get() { // Идентификация пользователя через кукис. var cookie = Request.Headers.GetCookies("UserHash").FirstOrDefault(); string userHash = cookie != null ? cookie["UserHash"].Value : ""; UserService userService = new UserService(); var vm = new UserAnswerListViewModel(); if (!string.IsNullOrEmpty(userHash)) { var answers = userService.GetAnswers(userHash); if (answers != null && answers.Count > 0) { foreach (var answer in answers) { var userAnswer = new UserAnswerViewModel { Value = answer.Value, Description = answer.Description }; vm.Items.Add(userAnswer); } } } return(vm); }
public ActionResult PostAnswer(UserAnswerViewModel model) { var context = new TestExamDbContext(); var registration = context.Registrations.SingleOrDefault(p => p.Token == model.Token); if (registration == null) { TempData["message"] = "Неверный токен, ошибка регистрации. Попробуйте снова"; return(RedirectToAction("Index")); } var questionInfo = context.Questions.Where(p => p.TestId == model.TestId && p.QuestionNumber == model.QuestionNum).FirstOrDefault(); if (questionInfo != null) { var valueOfUserChoice = context.Answers.SingleOrDefault(p => p.Id == model.UserChoice.ChoiceId).IsCorrect ? 1 : 0; Result result = new Result() { RegistrationId = registration.Id, QuestionId = questionInfo.Id, AnswerId = model.UserChoice.ChoiceId, Score = valueOfUserChoice }; context.Results.Add(result); context.SaveChanges(); } var countOfQuestions = context.Questions.Where(p => p.TestId == model.TestId).Count(); var nextQuestionNumber = 1; if (model.Direction.Equals("forward")) { nextQuestionNumber = context.Questions.Where(p => p.TestId == model.TestId && p.QuestionNumber > model.QuestionNum && p.QuestionNumber <= countOfQuestions) .OrderBy(p => p.QuestionNumber).Take(1).Select(p => p.QuestionNumber).FirstOrDefault(); } if (nextQuestionNumber < 1) { nextQuestionNumber = 1; } if (nextQuestionNumber <= countOfQuestions) { return(RedirectToAction("EvalPage", new { @token = Session["TOKEN"], @quesNum = nextQuestionNumber })); } else { return(RedirectToAction("ResultPage", new { @token = Session["TOKEN"] })); } }
public async Task <IActionResult> QuoteAnswers(string id) { var user = await _context.Users .Include(x => x.AnsweredQuotes) .FirstOrDefaultAsync(x => x.Id == id); if (user == null) { return(NotFound()); } var userAnswerModel = new UserAnswerViewModel() { User = user, UserAnswers = user.AnsweredQuotes }; return(View(userAnswerModel)); }