Esempio n. 1
0
        public async Task <string> CalculateUserProgress(UserProfileTopic t)
        {
            var user = await GetCurrentUserAsync();

            var topicModule      = _ctx.TopicModules.Where(x => x.TopicId == t.TopicId).First();
            int completedModules = 0;
            int totalModules     = 0;

            if (t.ToLearn)
            {
                switch (t.PastExperience)
                {
                case PriorLearned.None:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && x.PriorLearned == PriorLearned.None && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.C2M:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && (x.PriorLearned == PriorLearned.C2M || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.C2CPP:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && (x.PriorLearned == PriorLearned.C2CPP || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.M2C:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && (x.PriorLearned == PriorLearned.M2C || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.M2CPP:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && (x.PriorLearned == PriorLearned.M2CPP || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.CPP2M:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && (x.PriorLearned == PriorLearned.CPP2M || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.CPP2C:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && (x.PriorLearned == PriorLearned.CPP2C || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.MC2CPP:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && (x.PriorLearned == PriorLearned.MC2CPP || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.MCPP2C:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && (x.PriorLearned == PriorLearned.MC2CPP || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.CCPP2M:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && (x.PriorLearned == PriorLearned.CCPP2M || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                default:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => (x.Language == user.TargetLanguage || x.Language == TopicModuleLanguage.Concept) && x.PriorLearned == PriorLearned.None && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;
                }
            }
            else
            {
                switch (t.PastExperience)
                {
                case PriorLearned.None:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && x.PriorLearned == PriorLearned.None && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.C2M:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && (x.PriorLearned == PriorLearned.C2M || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.C2CPP:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && (x.PriorLearned == PriorLearned.C2CPP || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.M2C:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && (x.PriorLearned == PriorLearned.M2C || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.M2CPP:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && (x.PriorLearned == PriorLearned.M2CPP || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.CPP2M:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && (x.PriorLearned == PriorLearned.CPP2M || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.CPP2C:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && (x.PriorLearned == PriorLearned.CPP2C || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.MC2CPP:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && (x.PriorLearned == PriorLearned.MC2CPP || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.MCPP2C:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && (x.PriorLearned == PriorLearned.MC2CPP || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                case PriorLearned.CCPP2M:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && (x.PriorLearned == PriorLearned.CCPP2M || x.PriorLearned == PriorLearned.None) && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;

                default:
                    totalModules += _ctx.TopicModuleContent
                                    .Where(x => x.Language == user.TargetLanguage && x.PriorLearned == PriorLearned.None && x.TopicModuleId == topicModule.TopicModuleId)
                                    .Count();
                    break;
                }
            }

            completedModules = _ctx.UserLearningStates
                               .Where(x => x.AuthenticatedUserId == user.Id && x.TopicModuleId == topicModule.TopicModuleId && x.LearningState == LearningState.Completed)
                               .Count();

            return($"{completedModules} / {totalModules}");
        }
Esempio n. 2
0
        public async Task <ActionResult> GetTopics([FromBody] Profile payload)
        {
            var user = new AuthenticatedUser {
                UserName = payload.Email, Email = payload.Email, FullName = payload.FullName, TargetLanguage = (TopicModuleLanguage)payload.TargetLanguage, IsStaff = false, IsActive = true, IsSuperUser = false
            };
            var result = await _userManager.CreateAsync(user, payload.Password);

            if (result.Succeeded)
            {
                // Create UserProfileTopics
                foreach (var top in payload.ProfileTopics)
                {
                    string order = top.COrder.ToString() + top.CPLUSOrder.ToString() + top.MATLABOrder.ToString();
                    var    upt   = new UserProfileTopic()
                    {
                        ToLearn         = top.ToLearn,
                        ToLearnOverride = false,
                        TopicId         = top.TopicId,
                        UserProfileId   = user.Id,
                        ListOrder       = order
                    };

                    if (top.PastExperience.Contains(1) && top.PastExperience.Contains(2))
                    {
                        switch (user.TargetLanguage)
                        {
                        case TopicModuleLanguage.MATLAB:
                            upt.PastExperience = PriorLearned.CCPP2M;
                            break;

                        default:
                            upt.PastExperience = PriorLearned.None;
                            break;
                        }
                    }
                    else if (top.PastExperience.Contains(1) && top.PastExperience.Contains(3))
                    {
                        switch (user.TargetLanguage)
                        {
                        case TopicModuleLanguage.CPP:
                            upt.PastExperience = PriorLearned.MC2CPP;
                            break;

                        default:
                            upt.PastExperience = PriorLearned.None;
                            break;
                        }
                    }
                    else if (top.PastExperience.Contains(2) && top.PastExperience.Contains(3))
                    {
                        switch (user.TargetLanguage)
                        {
                        case TopicModuleLanguage.C:
                            upt.PastExperience = PriorLearned.MCPP2C;
                            break;

                        default:
                            upt.PastExperience = PriorLearned.None;
                            break;
                        }
                    }
                    else if (top.PastExperience.Contains(1))
                    {
                        switch (user.TargetLanguage)
                        {
                        case TopicModuleLanguage.CPP:
                            upt.PastExperience = PriorLearned.C2CPP;
                            break;

                        case TopicModuleLanguage.MATLAB:
                            upt.PastExperience = PriorLearned.C2M;
                            break;

                        default:
                            upt.PastExperience = PriorLearned.None;
                            break;
                        }
                    }
                    else if (top.PastExperience.Contains(2))
                    {
                        switch (user.TargetLanguage)
                        {
                        case TopicModuleLanguage.C:
                            upt.PastExperience = PriorLearned.C2CPP;
                            break;

                        case TopicModuleLanguage.MATLAB:
                            upt.PastExperience = PriorLearned.CPP2M;
                            break;

                        default:
                            upt.PastExperience = PriorLearned.None;
                            break;
                        }
                    }
                    else if (top.PastExperience.Contains(3))
                    {
                        switch (user.TargetLanguage)
                        {
                        case TopicModuleLanguage.C:
                            upt.PastExperience = PriorLearned.M2C;
                            break;

                        case TopicModuleLanguage.CPP:
                            upt.PastExperience = PriorLearned.M2CPP;
                            break;

                        default:
                            upt.PastExperience = PriorLearned.None;
                            break;
                        }
                    }
                    else
                    {
                        upt.PastExperience = PriorLearned.None;
                    }

                    _ctx.UserProfileTopics.Add(upt);
                    _ctx.SaveChanges();
                }

                var userProfileTopics = _ctx.UserProfileTopics
                                        .Where(x => x.UserProfileId == user.Id)
                                        .ToList();

                foreach (UserProfileTopic u in userProfileTopics)
                {
                    var contentModules = _ctx.TopicModuleContent
                                         .Where(x => x.TopicModule.TopicId == u.TopicId && x.PriorLearned == u.PastExperience && x.Language == user.TargetLanguage || x.PriorLearned == PriorLearned.None && x.TopicModule.TopicId == u.TopicId && x.Language == user.TargetLanguage || x.TopicModule.TopicId == u.TopicId && x.Class == ContentModuleClass.Concept && x.Language == TopicModuleLanguage.Concept)
                                         .ToList();

                    foreach (TopicModuleContent t in contentModules)
                    {
                        _ctx.UserLearningStates.Add(new UserLearningState()
                        {
                            AuthenticatedUserId  = user.Id,
                            LearningState        = (int)LearningState.Untouched,
                            TopicId              = u.TopicId,
                            TopicModuleContentId = t.TopicModuleContentId,
                            TopicModuleId        = t.TopicModuleId
                        });
                    }
                }

                try
                {
                    _ctx.SaveChanges();
                }
                catch (Exception ex)
                {
                }

                await _signInManager.SignInAsync(user, isPersistent : false);
            }

            return(new JsonResult("Account created."));
        }