/// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }