Esempio n. 1
0
        // ---------------------------------------------------------------------------------------------
        public ModuleDTO GetDTOWithQuestions(edumodule module, int userId)
        {
            ModuleDTO moduleDTO = ModuleMapper.GetDTO(module);
            List <TestQuestionDTO> questionDtosOfModule = QuestionDtosForModule(module);
            List <TestCodeDTO>     codeDtosOfModule     = CodeDtosForModule(module);


            // Wersja dla NAUCZYCIELA (do edycji modułów)
            // .........................................................................
            // brak id użytkownika - pytania będą zawierać indeks prawidłowej odpowiedzi
            // - ta wersja potrzebna jest do edycji modułów
            if (userId < 0)
            {
                moduleDTO.test_questions_DTO = questionDtosOfModule;
                moduleDTO.test_codes_DTO     = codeDtosOfModule;
                return(moduleDTO);
            }


            // Wersja dla STUDENTA
            // .........................................................................
            // Jest id uzytkownika -
            // - pytania będą zawierały indeks ostatniej odpowiedzi udzielonej przez użytkownika
            // - kody będą zawierały kody utworzone przez użytkownika
            // (zamiana indeksów prawidłowych odpowiedzi na ostatnie odpowiedzi podane przez użytkownika
            // i prawidłowych wyników kodu na kody utworzone przez użytkownika).
            moduleDTO.test_questions_DTO = SetStudentAnswers(userId, questionDtosOfModule);
            moduleDTO.test_codes_DTO     = SetStudentCodes(userId, codeDtosOfModule);


            // moduł gotowy do wysłania studentowi
            return(moduleDTO);
        }
Esempio n. 2
0
        public async Task <IReadOnlyList <PackageCarrier> > Load(PackagesLock packagesLock)
        {
            var mapper       = new ModuleMapper(_framework, _modulesDirectory, Runtime.Windows, Environment.Is64BitProcess ? Architecture.x64 : Architecture.x86);
            var packageStack = mapper.BuildMap(packagesLock);

            var loadedPackages = new ConcurrentBag <PackageCarrier>();

            while (packageStack.Any())
            {
                var dependencyLayer = packageStack.Pop();

                await TaskCombinators.ThrottledAsync(dependencyLayer, (context, token) =>
                {
                    return(Task.Run(() =>
                    {
                        foreach (var module in LoadModule(context))
                        {
                            loadedPackages.Add(module);
                        }
                    }));
                }, CancellationToken.None);
            }

            Packages = Packages.AddRange(loadedPackages);

            return(loadedPackages.ToList());
        }
Esempio n. 3
0
        // ---------------------------------------------------------------------------------------------
        public string FillMetaModules()
        {
            string[] stopnie = { "medium", "hard" };

            List <edumodule> modules;

            ModuleDTO[] children;

            for (int i = 0; i < 2; i++)
            {
                // pobranie wszystkich modułów na danym stopniu trudności
                modules = _moduleRepository.All().Where(m => m.difficulty == stopnie[i]).ToList();

                // wypełnienie modułu nadrzędnego treścią jego dzieci
                foreach (var module in modules)
                {
                    children = module.edumodule1
                               .ToList()
                               .Select(child => ModuleMapper.GetDTO(child))
                               .ToArray();
                    FillMetaModule(children, module);
                }
            }

            return("Automatycznie wypełniono meta moduły zawartością ich dzieci");
        }
Esempio n. 4
0
        public async Task Load(IEnumerable <PackageIdentity> primaryPackages, PackagesLock packagesLock)
        {
            var mapper = new ModuleMapper(_project.Framework, _project.ModulesDirectory, _project.Runtime, _project.Architecture);
            var map    = mapper.BuildMap(packagesLock);

            var dependencyPaths = new Dictionary <AssemblyName, AssemblyInfo>(new AssemblyNameComparer());

            _dependencyAssemblies = dependencyPaths;

            while (map.TryPop(out var dependencyLayer))
            {
                foreach (var context in dependencyLayer.Where(x => !x.IsMazeModule))
                {
                    foreach (var file in Directory.GetFiles(context.LibraryDirectory, "*.dll"))
                    {
                        dependencyPaths.Add(AssemblyName.GetAssemblyName(file), new AssemblyInfo(file));
                    }
                }

                await TaskCombinators.ThrottledAsync(dependencyLayer.Where(x => x.IsMazeModule), (context, token) => Task.Run(() =>
                {
                    foreach (var file in Directory.GetFiles(context.LibraryDirectory, "*.dll"))
                    {
                        var assembly = _assemblyLoadContext.LoadFromAssemblyPath(file);

                        var typeDiscoveryService = new TypeDiscoveryService(assembly, context.Package);
                        typeDiscoveryService.DiscoverTypes(ModuleTypeMap);
                    }
                }), CancellationToken.None);
            }
        }
Esempio n. 5
0
        // PRIVATE
        // =============================================================================================
        private ModuleDTO GetDTOWitResults(ICollection <user_question> userQuestions, List <test_question> passedQuests, ICollection <user_code> userCodes, List <test_code> passedCodes, edumodule mod)
        {
            ModuleDTO dto = ModuleMapper.GetDTO(mod);
            IEnumerable <test_question> moduleQuests;
            IEnumerable <test_code>     moduleCodes;

            moduleQuests = QuestionsForModule(mod);

            // this module has no questions
            if (moduleQuests.Count() == 0)
            {
                dto.solvedQuestions = true;
            }

            // the user has not answered this module's questions yet
            else if (userQuestions.FirstOrDefault(q => moduleQuests.Contains(q.test_question)) == null)
            {
                dto.solvedQuestions = false;
            }

            // check the latest user's results with this module question test
            else
            {
                dto.solvedQuestions = moduleQuests.FirstOrDefault(q => !passedQuests.Contains(q)) == null;
            }


            // codeTasks for the module
            moduleCodes = CodesForModule(mod);

            // this module has no code test
            if (moduleCodes.Count() == 0)
            {
                dto.solvedCodes = true;
            }

            // the user has not taken this module's code test yet
            else if (userCodes.FirstOrDefault(c => moduleCodes.Contains(c.test_code)) == null)
            {
                dto.solvedCodes = false;
            }

            // check the latest user's results with this module code test
            else
            {
                dto.solvedCodes = moduleCodes.FirstOrDefault(c => !passedCodes.Contains(c)) == null;
            }

            return(dto);
        }
        public List <Modules> AllModuleList()
        {
            try
            {
                ModuleMapper   objModuleMapper = new ModuleMapper();
                SqlParameter[] parameters      =
                {
                    new SqlParameter("@Type", "B")
                };

                IDataReader reader = base.GetReader("SP_Manage_Modules", parameters);
                using (reader)
                {
                    return(objModuleMapper.Map(reader));
                }
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
Esempio n. 7
0
        // ---------------------------------------------------------------------------------------------
        // TODO zrzobić porządek z tymi metodami do ModuleResult!
        private ModuleResultDTO GetModuleResultDTO(edumodule module, user user)
        {
            var userQuestions = user.user_question;
            var passedQuests  = userQuestions
                                .Where(uq => uq.last_result == true)
                                .Select(uq => uq.test_question)
                                .ToList();

            var userCodes   = user.user_code;
            var passedCodes = userCodes
                              .Where(uc => uc.last_result == true)
                              .Select(uc => uc.test_code)
                              .ToList();

            var dto = GetDTOWitResults(
                userQuestions,
                passedQuests,
                userCodes,
                passedCodes, module);

            return(ModuleMapper.GetModuleResultDTO(module, dto.solvedCodes, dto.solvedQuestions, false));
        }
Esempio n. 8
0
        // this resolver gets the file path from a known, named module
        public override bool TryGetModule(ModuleRequest moduleRequest, out Module result)
        {
            var modulePath = ModuleMapper.GetPath(moduleRequest.CmdArgument);

            if (modulePath is null)
            {
                result = null;
                return(false);
            }

            var resolvedPath = Path.Join(Directory.GetCurrentDirectory(), modulePath);

            if (!File.Exists(resolvedPath))
            {
                result = null;
                return(false);
            }

            var code = File.ReadAllText(resolvedPath);

            // by setting module name to full path, relative paths are available if/when the resolved file imports more files
            result = new Module(resolvedPath, code);
            return(true);
        }
Esempio n. 9
0
        // ---------------------------------------------------------------------------------------------
        public ModuleDTO UpsertModule(ModuleDTO moduleReceived)
        {
            var                  id = moduleReceived.id;
            edumodule            module;
            List <test_question> oldQuestions = null;
            List <test_code>     oldCodes     = null;


            // MODUŁ
            // ...............................................................
            // utworzenie nowego modułu lub pobranie istniejącego
            if (id == 0)
            {
                module = new edumodule();
                ModuleMapper.CopyValues(moduleReceived, module);
                _moduleRepository.Add(module);
            }
            else
            {
                module = _moduleRepository.Get(id);
                _moduleRepository.SetNewValues(moduleReceived, module);
                oldQuestions = module.test_question.ToList();
                oldCodes     = module.test_code.ToList();
            }

            // PYTANIA
            // ...............................................................
            // usunięcie pytań, których nie ma w tablicy z nowymi pytaniami
            var newQuestions = moduleReceived.test_questions_DTO;

            foreach (var oldQ in oldQuestions)
            {
                if (newQuestions == null)
                {
                    _questionService.DeleteQuestion(oldQ.id);
                }
                else if (!newQuestions.Exists(newQ => newQ.id == oldQ.id))
                {
                    _questionService.DeleteQuestion(oldQ.id);
                }
            }

            // zapisanie nowych i odświeżenie starych pytań przypisanych do modułu
            if (moduleReceived.test_questions_DTO != null && moduleReceived.difficulty == "easy")
            {
                foreach (var new_question in moduleReceived.test_questions_DTO)
                {
                    _questionService.UpsertQuestion(new_question);
                }
            }


            // CODE TASKS
            // ...............................................................
            // usunięcie zadań z kodu, których nie ma w tablicy z nowymi zadaniami
            var newCodes = moduleReceived.test_codes_DTO;

            foreach (var oldC in oldCodes)
            {
                if (newCodes == null)
                {
                    _codeService.DeleteCode(oldC.id);
                }
                else if (!newCodes.Exists(newC => newC.id == oldC.id))
                {
                    _codeService.DeleteCode(oldC.id);
                }
            }

            // zapisanie nowych i odświeżenie starych pytań przypisanych do modułu
            if (moduleReceived.test_codes_DTO != null && moduleReceived.difficulty == "easy")
            {
                foreach (var new_code in moduleReceived.test_codes_DTO)
                {
                    _codeService.UpsertCode(new_code);
                }
            }



            // RETURN
            // ...............................................................
            return(GetDTOWithQuestions(module, -1));
        }