Exemplo n.º 1
0
        public async Task <IActionResult> PAW(HomeworkViewModel model, IList <IFormFile> files)
        {
            if (ModelState.IsValid)
            {
                model = WrapStudentsData(model);
                model = WrapHomeworkDescriptionData(model);

                //get homework info
                var homeworkDescriptionName      = _repository.HomeworkDescriptionRepository.GetById(model.HomeworkDescriptionID).Name;
                var reflectionValidationFileName = _repository.HomeworkDescriptionRepository.GetById(model.HomeworkDescriptionID).ReflectionFile;
                var unitTestingFileName          = _repository.HomeworkDescriptionRepository.GetById(model.HomeworkDescriptionID).UnitTestsFile;

                //student's homework folder
                var studentsHomeworkFolder = Path.Combine(Config.BasePathToCodeFiles, model.GetHomeworkDirectory());
                var teachersHomeworkFolder = Path.Combine(Config.BasePathToValidationFiles, homeworkDescriptionName);

                //get validation files
                var reflectionFile  = Path.Combine(Config.BasePathToValidationFiles, homeworkDescriptionName, reflectionValidationFileName);
                var unitTestingFile = Path.Combine(Config.BasePathToValidationFiles, homeworkDescriptionName, unitTestingFileName);

                try
                {
                    HomeworkHelper.InitFolder(studentsHomeworkFolder, teachersHomeworkFolder);
                    await ProcessZipUpload(model.CsProject, studentsHomeworkFolder);

                    //compile and execute and then save data to DB
                    Evaluation eval = await EvaluatorTaskFactory
                                      .CreateAndStart(new EvaluationTask(studentsHomeworkFolder, model.CsProject.FileName, reflectionFile, unitTestingFile));

                    model.StaticEvaluationResult     = eval.StaticEvaluation.EvaluationResult;
                    model.FunctionalEvaluationResult = eval.FunctionalEvaluation.EvaluationResult;
                    TempData["evaluation"]           = JsonConvert.SerializeObject(eval);

                    //returns HomeworkID
                    var homeworkID = _repository.HomeworkRepository.Add(model);

                    return(RedirectToAction("Results", new { HomeworkID = homeworkID, model.StudentID }));
                }
                catch (Exception ex)
                {
                    return(RedirectToAction("Error"));
                }
            }

            return(RedirectToAction("PAW"));
        }