/// <summary> /// Ответить на вопрос. /// </summary> /// <param name="InterviweeTestId">Прохождение теста.</param> /// <param name="QuestionId">Вопрос.</param> /// <param name="AnswerId">Ответ.</param> public void AnswerToQuestion(DAO.InterviweeTests InterviweeTest, DAO.Question Question, DAO.Answer Answer) { // Если ответ на такой вопрос уже был - выходим. var ExistAnswer = _DbContext.TestingResults.Where(x => x.InterviweeTestsId == InterviweeTest.Id & x.QuestionId == Question.Id).Count(); if (ExistAnswer > 0) { return; } // Определить ответ. DAO.TestingResult _TestingResult = new DAO.TestingResult() { InterviweeTestsId = InterviweeTest.Id, QuestionId = Question.Id, AnswerId = Answer.Id, IsCorrect = _DbContext.QuestionAnswers.Where(x => x.QuestionId == Question.Id & x.IsCorrect).FirstOrDefault()?.AnswerId == Answer.Id }; // Добавить в результаты теста. _DbContext.TestingResults.Add(_TestingResult); _DbContext.SaveChanges(); }
/// <summary> /// Начать/получить процесс тестирования. /// </summary> private DAO.InterviweeTests StartTesting(DAO.InterviweeTests InterviweeTest) { DAO.InterviweeTests _InterviweeTest = _DbContext.InterviweeTests.Add(InterviweeTest); _DbContext.SaveChanges(); return(_InterviweeTest); }
/// <summary> /// Получить следующий вопрос для прохождения теста. /// </summary> /// <param name="InterviweeTests">Прохождение теста.</param> /// <returns></returns> public DAO.Question GetNextQuestion(DAO.InterviweeTests InterviweeTest, DAO.Question ExcludeQuestion = null) { // Если прохождение теста завершено. if (InterviweeTest.IsComplete) { return(null); } // Получим массив вопросов с ответами. DAO.Question[] _QuestionResults = _DbContext.TestingResults .Where(x => x.InterviweeTestsId == InterviweeTest.Id) .Select(x => x.Question) .ToArray(); // Получим массив вопросов теста. DAO.Question[] _QuestionsTest = _DbContext.TestQuestions .Where(x => x.TestId == InterviweeTest.TestId) .Select(x => x.Question) .ToArray(); // Получим массив незаданных вопросов. DAO.Question[] _QuestionsNotAnswer = _QuestionsTest.Except(_QuestionResults).ToArray(); // Случайный вопрос. DAO.Question _Question = RandomQuestion(_QuestionsNotAnswer, ExcludeQuestion); return(_Question); }
public string AnswerTheQuestion(DTO.InterviweeTest DtoInterviweeTest) { DTO.InterviweeTest _DtoInterviweeTest = DtoInterviweeTest; // Прохождение теста. DAO.InterviweeTests _DaoInterviweeTest = GetInterviweeTestByDtoId(ref _DtoInterviweeTest); // Текущий вопрос. DAO.Question _CurrentQuestion = m_QuestionManagement.GetQuestion(_DtoInterviweeTest.CurrentQuestion.Id); // Ответ на вопрос. DAO.Answer _Answer = m_AnswerManagement.GetAnswer(_DtoInterviweeTest.CurrentQuestion.SelectedAnswerId); m_Testing.AnswerToQuestion(_DaoInterviweeTest, _CurrentQuestion, _Answer); // Определим завершенность теста. m_Testing.DetermineStatusComplete(_DaoInterviweeTest); // Прохождение теста - обновление после ответа. _DaoInterviweeTest = GetInterviweeTestByDtoId(ref _DtoInterviweeTest); // Вопрос. _DtoInterviweeTest = GetNextQuestion(_DtoInterviweeTest, _DaoInterviweeTest, _CurrentQuestion); string _Json = Utils.JsonSerialize(_DtoInterviweeTest); return(_Json); }
/// <summary> /// Получить текст статуса прохождения теста. /// </summary> /// <returns></returns> private string GetTextProgressTesting(DAO.InterviweeTests DaoInterviweeTest) { string _TestName = DaoInterviweeTest.Test.Name; int _Questions = m_Testing.GetCountQuestions(DaoInterviweeTest); int _QuestionsComplete = m_Testing.GetCountCompletedQuestion(DaoInterviweeTest); int _CorrectAnswers = m_Testing.GetCountCorrectAnswers(DaoInterviweeTest); return($"тест [{_TestName}] пройдено вопросов [{_QuestionsComplete}/{_Questions}] правильных ответов [{_CorrectAnswers}]"); }
/// <summary> /// Опделить статус завершения теста. /// </summary> /// <returns></returns> public void DetermineStatusComplete(DAO.InterviweeTests InterviweeTest) { // Количество вопросов с ответом. int _CounTestResults = _DbContext.TestingResults.Where(x => x.InterviweeTestsId == InterviweeTest.Id).Count(); // Количество вопросов в тесте. int _CountTestQustions = _DbContext.TestQuestions.Where(x => x.TestId == InterviweeTest.TestId).Count(); // Сохраним в БД состояние теста. InterviweeTest.IsComplete = _CounTestResults >= _CountTestQustions; _DbContext.SaveChanges(); }
/// <summary> /// Получить процесс тестирования. /// </summary> /// <param name="Id"></param> /// <returns></returns> public InterviweeTests GetTesting(int Id) { // Найдем незавершенный тест. DAO.InterviweeTests _InterviweeTest = _DbContext.InterviweeTests .Include(x => x.Test) .Include(x => x.Interviwee) .Include(x => x.TestingResults) .Where(x => x.Id == Id) .SingleOrDefault(); return(_InterviweeTest); }
/// <summary> /// Получить процесс тестирования. /// </summary> /// <param name="Id"></param> /// <returns></returns> internal InterviweeTests GetTesting(DAO.Interviwee Interviwee, DAO.Test Test) { // Найдем незавершенный тест. // Сначала необходимо завершить предыдущий, потом начинать заново. DAO.InterviweeTests _InterviweeTest = _DbContext.InterviweeTests .Include(x => x.Test) .Include(x => x.Interviwee) .Include(x => x.TestingResults) .Where(x => x.InterviweeId == Interviwee.Id & x.TestId == Test.Id & x.IsComplete == false) .SingleOrDefault(); return(_InterviweeTest); }
public void TestingTest() { TestManagement _TestManagement = new TestManagement(); InterviweeManagement _InterviweeManagement = new InterviweeManagement(); KnowledgeTesting.BL.Testing _Testing = new KnowledgeTesting.BL.Testing(); DAO.Interviwee _Interviwee = _InterviweeManagement.GetInterviwee(StaticInterviwee.LasName, StaticInterviwee.FirstName, StaticInterviwee.SecondName); DAO.Test _Test = _TestManagement.GetTest(StaticTests.T1); int _CountCompleteTeststBefore = _Interviwee.Tests.Count(); DAO.InterviweeTests _InterviweeTests = _Testing.GetTesting(_Interviwee, _Test); // Количество отвеченных вопросов // (в конце на 1 больше чем вопрсов из-за последнего прохода цикла для определения статуса завершения). int _CountQuestions = 0; while (!_InterviweeTests.IsComplete) { // Определить статус завершения. _InterviweeTests.IsComplete = _Testing.DetermineStatusComplete(_InterviweeTests); if (!_InterviweeTests.IsComplete) { // Получить следующий вопрос. DAO.Question _Question = _Testing.GetNextQuestion(_InterviweeTests); // Отвтеить на вопрос. if (_Question != null) { _Testing.AnswerToQuestion(_InterviweeTests, _Question, _Question.Answers.First().Answer); } } // Сохранить изменения - БЕЗ этого не возможно определить статус завершения теста. _DbContext.SaveChanges(); _CountQuestions++; Assert.True(_CountQuestions <= 10); } int _CountCompleteTeststAfter = _Interviwee.Tests.Count(); Assert.True(_DbContext.InterviweeTests.Where(x => x.Id == _InterviweeTests.Id).First().IsComplete); Assert.True(_CountCompleteTeststAfter > _CountCompleteTeststBefore); Assert.True(_InterviweeTests.TestingResults.Count() > 0); }
public string StartTest(DTO.InterviweeTest DtoInterviweeTest) { // Получим объекты параметры для старта прохождения теста. DAO.Interviwee _DaoInterviwee = m_InterviweeManagement.GetInterviwee(DtoInterviweeTest.InterviweeId); DAO.Test _DaoTest = m_TestManagement.GetTest(DtoInterviweeTest.TestId); // Создадим прохождение теста. DAO.InterviweeTests _DaoInterviweeTest = m_Testing.StartTesting(_DaoInterviwee, _DaoTest); // Заполним объект для клиента. DTO.InterviweeTest _DtoInterviweeTest = Utils.ConverObjectByJson <DTO.InterviweeTest>(_DaoInterviweeTest); _DtoInterviweeTest.ProgressText = GetTextProgressTesting(_DaoInterviweeTest); string _Json = GetNextQuestion(_DtoInterviweeTest); return(_Json); }
/// <summary> /// Получить прохождение теста. /// </summary> /// <param name="DtoInterviweeTest"></param> /// <returns></returns> private DAO.InterviweeTests GetInterviweeTestByDtoId(ref DTO.InterviweeTest DtoInterviweeTest) { if (DtoInterviweeTest.Id <= 0) { throw new ArgumentException("Не задан Id входящего параметра."); } DTO.InterviweeTest _DtoInterviweeTest = DtoInterviweeTest; DAO.InterviweeTests _DaoInterviweeTest = m_Testing.GetTesting(DtoInterviweeTest.Id); // Прогресс прохождения теста. Utils.CopyPropObects(_DtoInterviweeTest, _DaoInterviweeTest); _DtoInterviweeTest.ProgressText = GetTextProgressTesting(_DaoInterviweeTest); DtoInterviweeTest = _DtoInterviweeTest; return(_DaoInterviweeTest); }
/// <summary> /// Начать/получить процесс тестирования. /// </summary> public DAO.InterviweeTests StartTesting(DAO.Interviwee Interviwee, DAO.Test Test) { DAO.InterviweeTests _InterviweeTest = GetTesting(Interviwee, Test); // Не нашли - создать прохождение теста. if (_InterviweeTest != null) { return(_InterviweeTest); } _InterviweeTest = new DAO.InterviweeTests() { InterviweeId = Interviwee.Id, TestId = Test.Id, IsComplete = false }; return(StartTesting(_InterviweeTest)); }
public string GetNextQuestion(DTO.InterviweeTest DtoInterviweeTest) { DTO.InterviweeTest _DtoInterviweeTest = DtoInterviweeTest; // Прохождение теста. DAO.InterviweeTests _DaoInterviweeTest = GetInterviweeTestByDtoId(ref _DtoInterviweeTest); // Текущий вопрос. DAO.Question _CurrentQuestion = null; if (DtoInterviweeTest.CurrentQuestion != null) { _CurrentQuestion = m_QuestionManagement.GetQuestion(DtoInterviweeTest.CurrentQuestion.Id); } // Вопрос. _DtoInterviweeTest = GetNextQuestion(_DtoInterviweeTest, _DaoInterviweeTest, _CurrentQuestion); string _Json = Utils.JsonSerialize(_DtoInterviweeTest); return(_Json); }
/// <summary> /// Получить следующий вопрос. /// </summary> /// <returns></returns> private DTO.InterviweeTest GetNextQuestion( DTO.InterviweeTest DtoInterviweeTest, DAO.InterviweeTests DaoInterviweeTest, DAO.Question CurrentQuestion) { DTO.InterviweeTest _DtoInterviweeTest = DtoInterviweeTest; // Вопрос. DAO.Question _DaoQuestion = m_Testing.GetNextQuestion(DaoInterviweeTest, CurrentQuestion); if (_DaoQuestion == null) { _DtoInterviweeTest.CurrentQuestion = new DTO.Question(); return(_DtoInterviweeTest); } if (_DaoQuestion != null) { _DtoInterviweeTest.CurrentQuestion = Utils.ConverObjectByJson <DTO.Question>(_DaoQuestion); // Ответы на вопрос. DAO.QuestionAnswers[] _DaoQuestionAnswers = _DaoQuestion.Answers.ToArray(); List <DTO.QuestionAnswers> _ListAnswers = new List <DTO.QuestionAnswers>(); foreach (var _DaoQuestionAnswer in _DaoQuestionAnswers) { _ListAnswers.Add(new DTO.QuestionAnswers() { AnswerId = _DaoQuestionAnswer.Answer.Id, AnswerText = _DaoQuestionAnswer.Answer.Text, IsCorrect = false, QuestionId = _DaoQuestionAnswer.QuestionId }); } _DtoInterviweeTest.CurrentQuestion.Answers = _ListAnswers; } return(_DtoInterviweeTest); }
/// <summary> /// Получить количество вопросов. /// </summary> public int GetCountQuestions(DAO.InterviweeTests InterviweeTest) { int _CountQuestions = InterviweeTest.Test.Questions.Count(); return(_CountQuestions); }
/// <summary> /// Получить количество ответов на вопрсы. /// </summary> public int GetCountCompletedQuestion(DAO.InterviweeTests InterviweeTest) { int _CompletedQuestion = InterviweeTest.TestingResults.Count(); return(_CompletedQuestion); }
/// <summary> /// Получить количество правильных ответов. /// </summary> public int GetCountCorrectAnswers(DAO.InterviweeTests InterviweeTest) { int _CorrectAnswers = InterviweeTest.TestingResults.Where(x => x.IsCorrect).Count(); return(_CorrectAnswers); }