// --------------------------------------------------------------------------------------------- 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); }
// PUBLIC // ============================================================================================= public static DistractorDTO GetDTO(distractor entity) { return(new DistractorDTO { //id = entity.id, //type = entity.type, distr_content = entity.distr_content }); }
// 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(); }
// --------------------------------------------------------------------------------------------- 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) }); }