private BaseFilterModel GetFilterForUserEnglishLevel( int neededCount, UserInformationModel userInformation, PerEnglishLevelTaskInformationModel userLevelInfo) { var totalCountOfUserLevelTasks = userLevelInfo.GrammarPartCount.Values.Sum(); if (totalCountOfUserLevelTasks < neededCount) { return(null); } var countWithUsersGrammarParts = 0; foreach (var grammarPart in userInformation.FavouriteGrammarParts) { if (userLevelInfo.GrammarPartCount.TryGetValue(grammarPart, out int grammarPartCount)) { countWithUsersGrammarParts += grammarPartCount; } } if (countWithUsersGrammarParts >= neededCount) { return(BaseFilterModel.CreateFromUserInformation(userInformation)); } var filterWithAllGrammarPartsForLevel = new BaseFilterModel(); filterWithAllGrammarPartsForLevel.EnglishLevel = new[] { userInformation.EnglishLevel }; filterWithAllGrammarPartsForLevel.GrammarPart = userLevelInfo.GrammarPartCount.Keys.ToList(); return(filterWithAllGrammarPartsForLevel); }
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 BaseFilterModel GetDefaultFilterModel() { var filterModel = new BaseFilterModel(); filterModel.EnglishLevel = EnglishLevelUtils.GetAllEnglishLevels(); filterModel.GrammarPart = ExistedGrammarParts; return(filterModel); }
public static BaseFilterModel CreateFromUserInformation(UserInformationModel userInformation) { var englishLevels = new[] { userInformation.EnglishLevel }; var filterModel = new BaseFilterModel() { GrammarPart = userInformation.FavouriteGrammarParts, EnglishLevel = englishLevels, }; return(filterModel); }