コード例 #1
0
        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);
            }
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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"]
                }));
            }
        }
コード例 #4
0
        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));
        }