Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }