Beispiel #1
0
        // ---------------------------------------------------------------------------------------------
        public ModuleAndDistractorDTO PrevModule(int userId, int currentModuleId)
        {
            user       user          = _userService.GetUserEntity(userId);
            distractor newDistractor = null;

            // pobranie listy modułów dotychczas wysłanych do tego użytkownika
            List <edumodule> prevModules = user.edumodule.ToList();

            ModuleService.SortGroupPosition(ref prevModules);

            // ustalenie pozycji aktualnego modułu na liście obejrzanych modułów
            int idx = prevModules.FindIndex(mod => mod.id == currentModuleId);

            if (idx > 0)
            {
                return new ModuleAndDistractorDTO()
                       {
                           module     = _moduleService.GetDTOWithQuestions(prevModules[idx - 1], userId),
                           distractor = newDistractor == null ? null : DistractorMapper.GetDTO(newDistractor)
                       }
            }
            ;

            return(null);
        }
Beispiel #2
0
 // PUBLIC
 // =============================================================================================
 public static DistractorDTO GetDTO(distractor entity)
 {
     return(new DistractorDTO {
         //id = entity.id,
         //type = entity.type,
         distr_content = entity.distr_content
     });
 }
Beispiel #3
0
        // PUBLIC
        // =============================================================================================
        public void UpsertUserDistractor(user user, distractor distractor)
        {
            user_distractor nextUserDistract = user.user_distractor
                                               .FirstOrDefault(ud => ud.distractor_id == distractor.id);

            if (nextUserDistract == null)
            {
                nextUserDistract = new user_distractor()
                {
                    user_id       = user.id,
                    distractor_id = distractor.id
                };
                user.user_distractor.Add(nextUserDistract);
            }

            nextUserDistract.time_last_used = DateTime.Now;

            _userService.SaveChanges();
        }
Beispiel #4
0
        // ---------------------------------------------------------------------------------------------
        public ModuleAndDistractorDTO NextModule(int userId, int currentModuleId, List <Pad> lastEmoStates)
        {
            edumodule  newModule;
            distractor newDistractor = null;
            user       user          = _userService.GetUserEntity(userId);


            // pobranie listy modułów dotychczas wysłanych do tego użytkownika
            List <edumodule> prevModules = user.edumodule.ToList();

            ModuleService.SortGroupPosition(ref prevModules);


            // jeśli kolejny moduł będzie wysłany po raz pierwszy - zostanie
            // dopisany do modułów tego użytkownika
            var addToUserModules = true;


            // To jest PIERWSZY moduł pobierany przez tego użytkownika
            if (prevModules.Count() == 0)
            {
                newModule = _moduleRepository.Get(1);
            }


            // To już nie pierwszy lecz KOLEJNY moduł
            else
            {
                var difficultyAndDistractor = PickNextDiffAndDistract(userId, lastEmoStates);

                // ustalenie pozycji aktualnego modułu na liście obejrzanych modułów
                int idx = prevModules.FindIndex(mod => mod.id == currentModuleId);


                // aktualnie użytkownik ogląda któryś z wczesniej pobranych
                // => pobranie następnego, który oglądał po aktualnym
                if (idx < prevModules.Count() - 1 && idx > -1)
                {
                    newModule        = prevModules[idx + 1];
                    addToUserModules = false;
                }

                // aktualnie użytkownik ogląda ostatni z pobranych =>
                // dostosowanie trudności do stanu emocjonalnego i dotychczasowych wyników użytkownika
                else
                {
                    var nextDifficulty = difficultyAndDistractor.Item1;
                    newModule = PickNextModule(currentModuleId, nextDifficulty, userId);
                }

                // pobranie następnego dystraktora (distractorService sprawdzi czy już można)
                var nextDistractorType = difficultyAndDistractor.Item2;
                newDistractor = _distractorService.NextDistractor(userId, nextDistractorType);
            }

            // zapisanie kolejnego modułu na liście wysłanych użytkownikowi
            // oraz zapamiętanie nowego ostatniego modułu użytkownika
            if (addToUserModules && newModule != null)
            {
                user.edumodule.Add(newModule);
                user.last_module = newModule.id;
                _userService.SaveChanges();
            }


            return(new ModuleAndDistractorDTO()
            {
                module = newModule == null ? null : _moduleService.GetDTOWithQuestions(newModule, userId),
                distractor = newDistractor == null ? null : DistractorMapper.GetDTO(newDistractor)
            });
        }