private int CalculateAndSaveTestResults(string emploeeNumber, TestContext context)
        {
            var test       = DbContext.Tests.Where(x => x.Id == context.TestId).First();
            var emploee    = DbContext.Employes.Where(x => x.Name == emploeeNumber).First();
            var testResult = new Result
            {
                EmployeeId = emploee.Id,
                Date       = DateTime.Now,
                TestId     = test.Id
            };

            int score        = 0;
            var questionList = new List <QuestionInformation>();
            var questionData = test.Questions.ToList();

            for (int i = 0; i < questionData.Count; i++)
            {
                var questionInformation = new QuestionInformation();

                var rightAnswer = questionData[i].PossibleAnswers.Where(x => x.Correct).First();

                if (context.UserAnswers[i] == rightAnswer.Id)
                {
                    score++;
                    questionInformation.UserAnswer    = rightAnswer.Answer;
                    questionInformation.IsRightAnswer = true;
                }
                else
                {
                    if (context.UserAnswers[i] != 0)
                    {
                        var userAnswer = questionData[i].PossibleAnswers.Where(x => x.Id == context.UserAnswers[i]).First();
                        questionInformation.UserAnswer = userAnswer.Answer;
                    }
                    else
                    {
                        questionInformation.UserAnswer = "Пользователь не ответил";
                    }

                    questionInformation.RightAnswer   = rightAnswer.Answer;
                    questionInformation.IsRightAnswer = false;
                }

                questionList.Add(questionInformation);
            }

            var testResultMetadata = new TestResultsInformation
            {
                TestOriginalName = test.Name,
                Score            = score,
                Questions        = questionList
            };

            testResult.Metadata = JsonConvert.SerializeObject(testResultMetadata);

            DbContext.Results.Add(testResult);
            DbContext.SaveChanges();

            return(testResult.Id);
        }
        public async Task <IActionResult> PutQuestionInformation([FromRoute] int id, [FromBody] QuestionInformation questionInformation)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != questionInformation.InfoId)
            {
                return(BadRequest());
            }

            _context.Entry(questionInformation).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!QuestionInformationExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <IActionResult> PostQuestionInformation([FromBody] QuestionInformation questionInformation)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _context.QuestionInformation.Add(questionInformation);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetQuestionInformation", new { id = questionInformation.InfoId }, questionInformation));
        }
Example #4
0
        private static IEnumerable <QuestionInformation> ParseQuestions(this IEnumerable <Question> questions)
        {
            List <QuestionInformation> qi = new List <QuestionInformation>();
            QuestionInformation        q;

            int[] rank = new int[questions.Count()];
            foreach (var item in questions)
            {
                q            = new QuestionInformation();
                q.Question   = item;
                q.TotalWords = PostMethods.GetTotalWords(item.Body);
                q.Errors     = PostMethods.CheckSpelling(item.Body);
                qi.Add(q);
            }
            return(qi);
        }