Ejemplo n.º 1
0
        private void ProcessResult(ProcessResult processResult, TournamentTask task, TournamentTaskAssignment assignee)
        {
            if (processResult.State == ProcessState.Completed && processResult.Status == BuildStatus.Complete)
            {
                assignee.Attempts       += 1;
                assignee.LastAttemptedAt = DateTime.Now;
                bool isEqual = storageManager.CompareFiles(task.InputFilePath, processResult.OutputFilePath);
                assignee.IsPassed = isEqual;
                taskRepository.Update(task);
            }
            else if (processResult.State == ProcessState.Error)
            {
                var errorType = processResultHelper.GetErrorType(processResult.Error);

                if (errorType == ProceesResultErrorType.Unknown || errorType == ProceesResultErrorType.Internal)
                {
                    return;
                }

                assignee.Attempts       += 1;
                assignee.LastAttemptedAt = DateTime.Now;
                assignee.IsPassed        = false;
                taskRepository.Update(task);
            }
        }
Ejemplo n.º 2
0
 public LecturerTaskResultViewModel(TournamentTaskAssignment taskAssignment)
 {
     Passed      = taskAssignment.IsPassed;
     Attempts    = taskAssignment.Attempts;
     LastAttempt = taskAssignment.LastAttemptedAt;
 }
Ejemplo n.º 3
0
        public async Task <IActionResult> OnPostSave(int?id)
        {
            if (!id.HasValue)
            {
                return(NotFound());
            }

            var task = taskRepository.GetTask(id.Value);

            if (task == null)
            {
                return(NotFound());
            }

            if (string.IsNullOrEmpty(ViewModel.InputFilePath) && ViewModel.InputFileUpload != null)
            {
                ViewModel.InputFilePath = ViewModel.InputFileUpload.ContentDisposition;
            }

            if (!ModelState.IsValid)
            {
                return(OnGet(id));
            }

            task.Name       = ViewModel.Name;
            task.Desc       = ViewModel.Desc;
            task.DueDate    = ViewModel.DueDate;
            task.MaxAttempt = ViewModel.MaxAttempts;
            task.Desc       = ViewModel.Desc;

            taskRepository.Update(task);

            // Change langs
            var taskLanguages = task.SupportedLanguages;
            var allLanguages  = languageRepository.GetAll();

            if (ViewModel.LanguagesId != null && taskLanguages != null && allLanguages != null)
            {
                var taskLanguagesId = new List <int>();

                foreach (var item in taskLanguages)
                {
                    taskLanguagesId.Add(item.SupportedProgrammingLanguageId);
                }

                var langsDifference = FindLangDifference(taskLanguagesId, ViewModel.LanguagesId);

                foreach (var item in langsDifference)
                {
                    var lang = allLanguages.FirstOrDefault(x => x.SupportedProgrammingLanguageId == item);

                    if (task.SupportedLanguages.Contains(lang))
                    {
                        task.SupportedLanguages.Remove(lang);
                    }
                    else
                    {
                        task.SupportedLanguages.Add(lang);
                    }
                }

                taskRepository.Update(task);
            }

            // change students
            var taskStudents       = task.Assignees;
            var tournamentStudents = userRepository.GetStudentsWithTournament(task.Tournament.TournamentId);

            if (ViewModel.StudentsId != null && taskStudents != null && tournamentStudents != null)
            {
                var taskStudentsId = new List <string>();

                foreach (var item in taskStudents)
                {
                    taskStudentsId.Add(item.User.Id);
                }

                var studentsDifference = FindStudentsDifference(taskStudentsId, ViewModel.StudentsId);

                foreach (var item in studentsDifference)
                {
                    var student  = tournamentStudents.FirstOrDefault(x => x.Id == item);
                    var assignee = task.Assignees.FirstOrDefault(x => x.User == student);

                    if (assignee != null)
                    {
                        task.Assignees.Remove(assignee);
                    }
                    else
                    {
                        TournamentTaskAssignment assignment = new TournamentTaskAssignment
                        {
                            User     = student,
                            Attempts = 0,
                            IsPassed = false,
                            Task     = task
                        };

                        task.Assignees.Add(assignment);

                        taskRepository.Update(task);
                    }
                }
            }

            // upload file
            StorageManager       storageManager       = new StorageManager();
            TournamentRepository tournamentRepository = new TournamentRepository(context);

            var tournament = tournamentRepository.GetTournamentByTask(task.TournamentTaskId);

            if (ViewModel.InputFileUpload != null && ViewModel.InputFileUpload.Length != 0)
            {
                if (tournament != null)
                {
                    var inputFilePath = storageManager.CreateInputFile(tournament.TournamentId.ToString(), task.TournamentTaskId.ToString());
                    using (var stream = new FileStream(inputFilePath, FileMode.Create))
                    {
                        await ViewModel.InputFileUpload.CopyToAsync(stream);
                    }

                    task.InputFilePath = inputFilePath;
                    taskRepository.Update(task);
                }
            }

            if (ViewModel.ExpectedFileUpload != null && ViewModel.ExpectedFileUpload.Length != 0)
            {
                if (tournament != null)
                {
                    var expectedFilePath = storageManager.CreateExpectedFile(tournament.TournamentId.ToString(), task.TournamentTaskId.ToString());
                    using (var stream = new FileStream(expectedFilePath, FileMode.Create))
                    {
                        await ViewModel.ExpectedFileUpload.CopyToAsync(stream);
                    }

                    task.ExpectedFilePath = expectedFilePath;
                    taskRepository.Update(task);
                }
            }

            return(OnGet(id));
        }