private bool CreateDailyReward( int category, List <DailyReward> list, DailyRewardLevel currentUserLevel, QuizzGradeLevelEnum min, QuizzGradeLevelEnum max, DateTime today) { int qzCount = _uow.Quizzes.GetAll() .Where(q => q.Category == category && q.IsLive == true && ( (min >= q.GradeLevelMin && min <= q.GradeLevelMax && max >= q.GradeLevelMin && max <= q.GradeLevelMax) || (min >= q.GradeLevelMin && min <= q.GradeLevelMax && max >= q.GradeLevelMin && max >= q.GradeLevelMax) || (min <= q.GradeLevelMin && min <= q.GradeLevelMax && max >= q.GradeLevelMin && max <= q.GradeLevelMax) || (min <= q.GradeLevelMin && min <= q.GradeLevelMax && max >= q.GradeLevelMin && max >= q.GradeLevelMax))) .Count(); if (qzCount == 0) { return(false); } int quizzIdx = _random.Next(qzCount); int quizzId = _uow.Quizzes.GetAll() .Where(q => q.Category == category && q.IsLive == true && ( (min >= q.GradeLevelMin && min <= q.GradeLevelMax && max >= q.GradeLevelMin && max <= q.GradeLevelMax) || (min >= q.GradeLevelMin && min <= q.GradeLevelMax && max >= q.GradeLevelMin && max >= q.GradeLevelMax) || (min <= q.GradeLevelMin && min <= q.GradeLevelMax && max >= q.GradeLevelMin && max <= q.GradeLevelMax) || (min <= q.GradeLevelMin && min <= q.GradeLevelMax && max >= q.GradeLevelMin && max >= q.GradeLevelMax))) .OrderByDescending(q => q.Modified) .Skip(quizzIdx) .Take(1) .Select(q => q.Id) .FirstOrDefault(); if (quizzId == 0) { return(false); } DailyReward reward = new DailyReward { ForDate = today, Level = currentUserLevel, QuizzId = quizzId }; _uow.DailyRewards.Add(reward); list.Add(reward); return(true); }
private DailyRewardLevel GetUserLevel(out QuizzGradeLevelEnum min, out QuizzGradeLevelEnum max) { DailyRewardLevel level = DailyRewardLevel.CollegeAndProf; min = QuizzGradeLevelEnum.College; max = QuizzGradeLevelEnum.Professional; int age = (int)Math.Floor(DateTime.Now.Subtract(_currentUser.Profile.BirthDate).TotalDays / 365); if (age <= 5) { level = DailyRewardLevel.KBelow; min = QuizzGradeLevelEnum.PreK; max = QuizzGradeLevelEnum.K; } else if (age <= 8) { level = DailyRewardLevel.Grade1To3; min = QuizzGradeLevelEnum.Grade1; max = QuizzGradeLevelEnum.Grade3; } else if (age <= 11) { level = DailyRewardLevel.Grade4To6; min = QuizzGradeLevelEnum.Grade4; max = QuizzGradeLevelEnum.Grade6; } else if (age <= 14) { level = DailyRewardLevel.Grade7to9; min = QuizzGradeLevelEnum.Grade7; max = QuizzGradeLevelEnum.Grade9; } else if (age <= 17) { level = DailyRewardLevel.Grade10To12; min = QuizzGradeLevelEnum.Grade10; max = QuizzGradeLevelEnum.Grade12; } return(level); }
private List <DailyReward> GenerateDailyRewardForLevel( DailyRewardLevel currentUserLevel, QuizzGradeLevelEnum min, QuizzGradeLevelEnum max, DateTime today) { var list = new List <DailyReward>(); CreateDailyReward(0, list, currentUserLevel, min, max, today); CreateDailyReward(1, list, currentUserLevel, min, max, today); CreateDailyReward(2, list, currentUserLevel, min, max, today); var catList = GetIncludedCategories(); int numQuizz = _numGenerateDailyRewardPerDay - list.Count; do { if (catList.Count == 0) { break; } int catIdx = _random.Next(catList.Count); int categoryValue = catList[catIdx].CategoryValue; catList.RemoveAt(catIdx); if (CreateDailyReward(categoryValue, list, currentUserLevel, min, max, today)) { numQuizz--; } else { continue; } } while (numQuizz > 0); _uow.SaveChanges(); list = _uow.DailyRewards.GetAll() .Where(d => d.Level == currentUserLevel && d.ForDate == today) .ToList(); return(list); }