Example #1
0
        public UserPointsModel Get()
        {
            var userId = GetUser();



            var userPoints = Context.UsersPoints.Where(a => a.User.Id == userId).FirstOrDefault();

            if (userId == null || userPoints == null)
            {
                return(new UserPointsModel
                {
                    MaxListeningPoints = PointsLevel.GetMaxLevelPoints(PointsLevel.GetLevel(0)),
                    MaxSpeakingPoints = PointsLevel.GetMaxLevelPoints(PointsLevel.GetLevel(0)),
                    MaxWritingPoints = PointsLevel.GetMaxLevelPoints(PointsLevel.GetLevel(0)),
                    ProgressLevelPercentage = PointsLevel.GetProgress(0),
                    ListeningProgressPercentage = 0,
                    SpeakingProgressPercentage = 0,
                    WritingProgressPercentage = 0
                });
            }

            var avgPoints = (int)((userPoints.WritingPoints + userPoints.SpeakingPoints + userPoints.ListeningPoints) / 3);
            var userLevel = PointsLevel.GetLevel(avgPoints);

            return(new UserPointsModel
            {
                MaxListeningPoints = PointsLevel.GetMaxLevelPoints(PointsLevel.GetLevel(userPoints.ListeningPoints ?? 0)),
                MaxSpeakingPoints = PointsLevel.GetMaxLevelPoints(PointsLevel.GetLevel(userPoints.SpeakingPoints ?? 0)),
                MaxWritingPoints = PointsLevel.GetMaxLevelPoints(PointsLevel.GetLevel(userPoints.WritingPoints ?? 0)),
                UserLevel = (int)userLevel,
                ProgressLevelPercentage = PointsLevel.GetProgress(avgPoints),
                ListeningProgressPercentage = PointsLevel.GetProgress(userPoints.ListeningPoints ?? 0),
                SpeakingProgressPercentage = PointsLevel.GetProgress(userPoints.SpeakingPoints ?? 0),
                WritingProgressPercentage = PointsLevel.GetProgress(userPoints.WritingPoints ?? 0)
            });



            //userPoints.ProgressLevelPercentage = (int)((avgPoints / (float)PointsLevel.GetMaxLevelPoints(userLevel)) * 100);
            //userPoints.MaxListeningPoints = PointsLevel.GetMaxLevelPoints(PointsLevel.GetLevel(userPoints.ListeningPoints));
            //userPoints.MaxSpeakingPoints = PointsLevel.GetMaxLevelPoints(PointsLevel.GetLevel(userPoints.SpeakingPoints));
            //userPoints.MaxWritingPoints = PointsLevel.GetMaxLevelPoints(PointsLevel.GetLevel(userPoints.WritingPoints));
            //userPoints.UserLevel = (int)userLevel;
            //return userPoints;
        }
Example #2
0
        public int GetUserLevel()
        {
            string userId = GetUser();

            var points = Context.UsersPoints.Where(v => v.User.Id == userId)
                         .Select(s => new { s.ListeningPoints, s.WritingPoints, s.SpeakingPoints }).FirstOrDefault();

            if (userId == null || points == null)
            {
                return((int)Enums.Level.Elementary);
            }

            int arithmeticMean = ((int)points.ListeningPoints + (int)points.WritingPoints) / 2;

            Enums.Level level = PointsLevel.GetLevel(arithmeticMean);

            return((int)level);
        }
Example #3
0
        public string ChangeUserLevel(int level)
        {
            try
            {
                string userId = GetUser();
                if (userId == null)
                {
                    return("");
                }

                var userPoints = Context.UsersPoints.Where(a => a.User.Id == userId).FirstOrDefault();
                var user       = Context.Users.Where(a => a.Id == userId).FirstOrDefault();
                if (userPoints == null)
                {
                    var points = level > 1 ? PointsLevel.GetMaxLevelPoints((Enums.Level)(level - 1)) + 1 : 1;
                    Context.UsersPoints.Add(new UserPoints()
                    {
                        User            = user,
                        ListeningPoints = points,
                        WritingPoints   = points,
                        SpeakingPoints  = points
                    });
                    Context.SaveChanges();
                    return("Save the level Successful.");
                }
                else
                {
                    var startPoints    = level > 1 ? PointsLevel.GetMaxLevelPoints((Enums.Level)(level - 1)) + 1 : 1;
                    var maxLevelPoints = PointsLevel.GetMaxLevelPoints((Enums.Level)level);

                    userPoints.User            = user;
                    userPoints.ListeningPoints = userPoints.ListeningPoints <= maxLevelPoints && userPoints.ListeningPoints >= startPoints ? userPoints.ListeningPoints : startPoints;
                    userPoints.WritingPoints   = userPoints.WritingPoints <= maxLevelPoints && userPoints.WritingPoints >= startPoints ? userPoints.WritingPoints : startPoints;;
                    userPoints.SpeakingPoints  = userPoints.SpeakingPoints <= maxLevelPoints && userPoints.SpeakingPoints >= startPoints ? userPoints.SpeakingPoints : startPoints;;

                    Context.SaveChanges();
                    return("Save the level Successful.");
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }
        public RecommendationsModel Get()
        {
            string userId = GetUser();


            var points = Context.UsersPoints.Where(v => v.User.Id == userId)
                         .Select(s => new { s.ListeningPoints, s.WritingPoints, s.SpeakingPoints }).FirstOrDefault();

            if (userId == null || points == null)
            {
                var video = _videoModelBuilder.Build(Context.Videos.OrderBy(o => o.Level).ThenBy(o => o.Id).FirstOrDefault());
                return(new RecommendationsModel
                {
                    ListeningRecommendation = video,
                    WritingRecommendation = video,
                    SpeakingRecommendation = video
                });
            }

            Enums.Level listeningLevel = PointsLevel.GetLevel((int)points.ListeningPoints);
            Enums.Level writingLevel   = PointsLevel.GetLevel((int)points.WritingPoints);
            Enums.Level speakingLevel  = PointsLevel.GetLevel((int)points.SpeakingPoints);


            var videoForListening = (from a in Context.Videos.Where(l => l.Level >= (int)listeningLevel)
                                     join b in Context.UserProgress
                                     .Where(w => w.User.Id == userId)
                                     on a equals b.Video into joined
                                     from j in joined.DefaultIfEmpty().Where(v => v.ListeningModulePassed != true || v.ListeningModulePassed == null)
                                     select new VideoModel
            {
                Id = a.Id,
                Language = a.Language,
                Level = a.Level,
                Thumbnail = a.Thumbnail,
                Title = a.Title,
                Url = a.Url,
                ListeningModulePassed = j.ListeningModulePassed,
                WritingModulePassed = j.WritingModulePassed
            }).OrderBy(o => o.Level).ThenByDescending(o => o.WritingModulePassed).ThenBy(o => o.Id).FirstOrDefault();

            var videoForWriting = (from a in Context.Videos.Where(l => l.Level >= (int)writingLevel)
                                   join b in Context.UserProgress
                                   .Where(w => w.User.Id == userId)
                                   on a equals b.Video into joined
                                   from j in joined.DefaultIfEmpty().Where(v => v.WritingModulePassed != true || v.WritingModulePassed == null)
                                   select new VideoModel
            {
                Id = a.Id,
                Language = a.Language,
                Level = a.Level,
                Thumbnail = a.Thumbnail,
                Title = a.Title,
                Url = a.Url,
                ListeningModulePassed = j.ListeningModulePassed,
                WritingModulePassed = j.WritingModulePassed
            }).OrderBy(o => o.Level).ThenByDescending(o => o.ListeningModulePassed).ThenBy(o => o.Id).FirstOrDefault();


            var videoForSpeaking = (from a in Context.Videos.Where(l => l.Level >= (int)speakingLevel)
                                    join b in Context.UserProgress
                                    .Where(w => w.User.Id == userId)
                                    on a equals b.Video into joined
                                    from j in joined.DefaultIfEmpty().Where(v => v.SpeakingModulePassed != true || v.SpeakingModulePassed == null)
                                    select new VideoModel
            {
                Id = a.Id,
                Language = a.Language,
                Level = a.Level,
                Thumbnail = a.Thumbnail,
                Title = a.Title,
                Url = a.Url,
                ListeningModulePassed = j.ListeningModulePassed,
                WritingModulePassed = j.WritingModulePassed
            }).OrderBy(o => o.Level).ThenByDescending(o => o.ListeningModulePassed).ThenByDescending(o => o.WritingModulePassed).ThenBy(o => o.Id).FirstOrDefault();

            int arithmeticMean = ((int)points.ListeningPoints + (int)points.WritingPoints) / 2;

            Enums.Level level = PointsLevel.GetLevel(arithmeticMean);

            RecommendationsModel recommendations = new RecommendationsModel
            {
                ListeningRecommendation = videoForListening,
                WritingRecommendation   = videoForWriting,
                SpeakingRecommendation  = videoForSpeaking
            };



            return(recommendations);
        }