/// <summary> /// Метод проверяет результаты ответов на тест исполнителем. /// </summary> /// <param name="answers">Массив с ответами на тест.</param> /// /// <param name="userName">Логин юзера.</param> /// <returns>Статус прохождения теста true/false.</returns> public async Task <bool> CheckAnswersTestAsync(List <AnswerVariant> answers, string userName) { try { if (answers.Count == 0) { throw new UserMessageException(TextException.ERROR_EMPTY_INPUT_ARRAY_ANSWERS); } List <bool> answersEqual = new List <bool>(); // Считает кол-во правильных ответов. for (int i = 0; i < answers.Count; i++) { // Уберет пробелы в начале и в конце. answers[i].AnswerVariantText = CommonMethodsService.ReplaceSpacesString(answers[i].AnswerVariantText); // Заменит флаг правильности с null на false. if (answers[i].IsRight == null) { answers[i].IsRight = false; } // Находит такой ответ в БД. AnswerVariantEntity answer = await _postgre.AnswerVariants .Where(a => a.QuestionId .Equals(answers[i].QuestionNumber)) .SingleOrDefaultAsync(); // Выбирает конкретный вариант для проверки правильности. string rightVariant = answer.AnswerVariantText .Where(a => a.IsRight.Equals(true)) .Select(a => a.AnswerVariantText) .FirstOrDefault(); answers[i].IsRight = answers[i].AnswerVariantText.Equals(rightVariant); answersEqual.Add((bool)answers[i].IsRight); } // Если не все ответы были верными, то тест не пройден. bool isSuccessed = answersEqual.All(a => a.Equals(true)); // Если исполнитель не прошел тест. if (!isSuccessed) { return(false); } UserEntity user = await _userService.GetUserByLogin(userName); user.IsSuccessedTest = true; await _postgre.SaveChangesAsync(); return(true); } catch (Exception ex) { Logger _logger = new Logger(_db, ex.GetType().FullName, ex.Message.ToString(), ex.StackTrace); _ = _logger.LogError(); throw new Exception(ex.Message.ToString()); } }