/// <summary> /// Выполняет трансляцию DTO в модель блока теста. /// </summary> /// <param name="dto">DTO-объект блока теста.</param> /// <returns>Модель с описанием блока теста.</returns> private QuizBlockViewModel TranslateQuizBlockModel(QuizBlockDto dto) { var model = new QuizBlockViewModel { BlockId = dto.Id, Question = TranslateQuestionModel(dto.Question), Answers = dto.Answers.Select(TranslateAnswerModel).ToList() }; return(model); }
/// <summary> /// Выполняет трансляцию модели блока теста в DTO. /// </summary> /// <param name="model">Модель с описанием блока теста.</param> /// <returns>DTO-объект блока теста.</returns> private QuizBlockDto TranslateQuizBlockModel(QuizBlockViewModel model) { var dto = new QuizBlockDto { Id = model.BlockId, Question = TranslateQuestionModel(model.Question), Answers = model.Answers.Select(TranslateAnswerModel).ToList() }; return(dto); }
/// <summary> /// Выполняет преобразование <see cref="QuizBlockDto"/> в <see cref="QuizBlockModel"/>. /// </summary> /// <param name="dto">Исходный объект.</param> /// <returns>Преобразованный объект.</returns> public static QuizBlockModel Translate(QuizBlockDto dto) { var model = new QuizBlockModel { Id = dto.Id, Question = Translate(dto.Question), Answers = dto.Answers.Select(Translate).ToList(), UserAnswer = new List <string>(), }; return(model); }
/// <summary> /// Выполняет проверку ответов пользователя /// </summary> /// <param name="sourceQuizBlock">Исходный блок теста.</param> /// <param name="answeredQuizBlock">Блок теста с ответом пользователя.</param> /// <returns>Значение, показывающее, правильно ли ответил пользователь.</returns> public static bool CheckQuizAnswer(QuizBlockDto sourceQuizBlock, UserAnswerDto answeredQuizBlock) { var userAnswerList = answeredQuizBlock.UserAnswer.Split(new[] { Environment.NewLine }, StringSplitOptions.None); var blockAnswerList = sourceQuizBlock.Answers.Where(e => e.IsCorrect).ToList(); //// Если нет пользовательских ответов - ответ некорректный. if (!userAnswerList.Any()) { return(false); } //// Проверим ответы. var allIsCorrect = true; foreach (var blockAnswer in blockAnswerList) { switch (blockAnswer.AnswerType) { case AnswerBlockType.Text: var firstUserAnswer = userAnswerList.First().Trim(); var firstBlockAnswer = blockAnswer.Text.Trim(); allIsCorrect &= firstBlockAnswer.Equals(firstUserAnswer, StringComparison.InvariantCultureIgnoreCase); break; case AnswerBlockType.Checkbox: case AnswerBlockType.Radio: allIsCorrect &= userAnswerList.Contains(blockAnswer.Id.ToString()); break; default: throw new ArgumentOutOfRangeException(nameof(blockAnswer.AnswerType)); } } return(allIsCorrect); }