private async Task <IReadOnlyList <TaskItem> > GetRandomTaskItemsAsync( EnglishLevel englishLevel, string grammarPart, TaskType taskType, int count) { var englishLevels = new List <EnglishLevel>() { englishLevel }; if (englishLevel == EnglishLevel.Intermediate) { englishLevels.Add(EnglishLevel.PreIntermediate); englishLevels.Add(EnglishLevel.Elementary); } var taskItems = await _taskItemRepository .FindAllAsync(x => x.GrammarPart == grammarPart && x.TaskType == taskType); taskItems = taskItems .Where(x => englishLevels.Contains(x.EnglishLevel)) .ToList(); var randomItems = taskItems .GetRandomCountOfElements(count) .ToList(); return(randomItems); }
public static EnglishLevel[] GetSortedEnglishLevelsByNearest(EnglishLevel englishLevel) { var englishLevels = Enum .GetValues(typeof(EnglishLevel)) .Cast <int>() .ToList(); englishLevels.Sort(); var englishLevelsCount = englishLevels.Count; var sortedEnglishLevels = new EnglishLevel[englishLevelsCount - 1]; var leftLevel = (int)englishLevel - 1; var rightLevel = (int)englishLevel + 1; int index = 0; while (leftLevel >= 0 || rightLevel < englishLevelsCount) { if (leftLevel >= 0) { sortedEnglishLevels[index] = (EnglishLevel)leftLevel; index++; leftLevel--; } if (rightLevel < englishLevelsCount) { sortedEnglishLevels[index] = (EnglishLevel)rightLevel; index++; rightLevel++; } } return(sortedEnglishLevels); }
private BaseFilterModel GetFilterWithTheNearestEnglishLevel(int neededCount, EnglishLevel userEnglishLevel) { var grammarParts = new List <string>(); var englishLevels = new List <EnglishLevel>(); var totalCount = 0; englishLevels.Add(userEnglishLevel); grammarParts.AddRange(TasksInformationModels[userEnglishLevel].GrammarPartCount.Keys); totalCount += TasksInformationModels[userEnglishLevel].GrammarPartCount.Values.Sum(); var sortedEnglishLevelsByNearerToUser = EnglishLevelUtils.GetSortedEnglishLevelsByNearest(userEnglishLevel); foreach (var englishLevel in sortedEnglishLevelsByNearerToUser) { if (TasksInformationModels.TryGetValue(englishLevel, out var levelInformation)) { englishLevels.Add(englishLevel); grammarParts.AddRange(TasksInformationModels[englishLevel].GrammarPartCount.Keys); totalCount += TasksInformationModels[englishLevel].GrammarPartCount.Values.Sum(); if (totalCount >= neededCount) { break; } } } var baseFilterModel = new BaseFilterModel(); baseFilterModel.EnglishLevel = englishLevels; baseFilterModel.GrammarPart = grammarParts; return(baseFilterModel); }
public UserStatisticByQuizView GetUserStatistic(UserStatistic userStatistic, EnglishLevel englishLevel) { var userStatisticView = new UserStatisticByQuizView() { ScoreForQuiz = decimal.Round(userStatistic.CorrectPercent * 100), TimeToSolved = new TimeSpan(1, 14, 18).ToString(), EnglishLevel = englishLevel, QuizResultChartView = new QuizResultChartView { CorrectAnswers = userStatistic.CorrectAnswersCount, FaliedAnswers = userStatistic.FailedAnswersCount, TotalAnswers = userStatistic.QuestionsCount } }; return(userStatisticView); }
public UserStatisticView GetUserStatistics(IEnumerable <UserStatistic> userStatistics, EnglishLevel englishLevel) { if (userStatistics == null || !userStatistics.Any()) { return(new UserStatisticView() { EnglishLevel = EnglishLevel.Beginner }); } var userStatisticView = new UserStatisticView() { TotalPassedQuizzes = userStatistics.Select(x => x.QuizId).Distinct().Count(), ScoreForQuizzes = decimal.Round((userStatistics.Sum(x => x.CorrectPercent) / userStatistics.Count()) * 100), EnglishLevel = englishLevel, LastScoresChartView = new LastScoresChartView { QuizScores = userStatistics.Take(5).Select(x => new QuizScoreView { Title = x.QuizTitle, Score = x.CorrectPercent }) }, QuizResultChartView = new QuizResultChartView { CorrectAnswers = userStatistics.Sum(x => x.CorrectAnswersCount), FaliedAnswers = userStatistics.Sum(x => x.FailedAnswersCount), TotalAnswers = userStatistics.Sum(x => x.QuestionsCount) }, PassedPercent = decimal.Round((userStatistics.Sum(x => x.CorrectAnswersCount) / userStatistics.Sum(x => x.FailedAnswersCount)) * 100), TotalPassedQuestions = userStatistics.Sum(x => x.CorrectAnswersCount), TotalFailedQuestions = userStatistics.Sum(x => x.FailedAnswersCount), }; return(userStatisticView); }