public void ReportError(Guid project_id, Guid sprint_id, Guid submission_id, ReportErrorM model)
        {
            try
            {
                Submission     submission      = EnsureExisted(project_id, sprint_id, submission_id);
                TaskSubmission task_submission = _taskSubmission.GetOne(ts => ts.SubmissionId.Equals(submission_id) && ts.TaskId.Equals(model.TaskId));
                if (task_submission == null)
                {
                    throw NotFound();
                }

                task_submission.Passed   = model.Passed;
                task_submission.Failed   = model.Failed;
                task_submission.IsTested = true;
                task_submission.Message  = model.Message;

                Data.Models.Task task = _task.GetOne(t => t.Id.Equals(model.TaskId));
                task.Status = model.Failed != 0 ? "Error" : "Complete";

                SaveChanges();
            }
            catch (Exception e)
            {
                throw e is RequestException ? e : _errorHandler.WriteLog("An error occurred!",
                                                                         e, DateTime.Now, "Server", "Service-Submission-ReportError");
            }
        }
Beispiel #2
0
        public async Task <IActionResult> PostSubmitTask(CreateTaskSubmissionRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var studentTask = await _context.StudentAssignedTasks
                              .FirstOrDefaultAsync(st => st.Id == request.StudentTaskId);

            if (studentTask is null)
            {
                return(NotFound());
            }

            if (studentTask.StudentId != userManager.GetUserId(User))
            {
                return(Forbid());
            }

            var submission = new TaskSubmission {
                AssignedTaskId = studentTask.Id,
                State          = TaskSubmissionState.Submitted,
                DateAdded      = DateTime.Now,
                Files          = new List <TaskSubmissionFile>(),
                Description    = request.Description
            };

            _context.TaskSubmissions.Add(submission);
            await _context.SaveChangesAsync();

            foreach (var uploadedFile in request.UploadedFiles)
            {
                var submissionFolder = $"StudentSubmissions/{studentTask.StudentId}/{studentTask.Id}/{submission.Id}";

                // TODO: validate file extension.
                var(fileName, extension) = FilesHelpers.GetFileNameAndExtension(uploadedFile.OriginalName);

                var file = await fileService.MoveTempFile(uploadedFile.TempFileName, submissionFolder, uploadedFile.OriginalName);

                submission.Files.Add(new TaskSubmissionFile {
                    FileId         = file.Id,
                    FileType       = TaskSubmissionFileType.SourceCode,
                    TaskSubmission = submission
                });
            }

            await _context.SaveChangesAsync();

            return(Ok());
        }
        public ActionResult Submit(TaskSubmission taskSubmission, long id)
        {
            if (ModelState.IsValid)
            {
                string userId     = User.Identity.GetUserId();
                var    student    = db.Students.Find(userId);
                var    classTask  = student.enrollment.ClassTasks.ToList().Find(p => p.Id == id);
                var    submission = classTask.TaskSubmissions.ToList().Find(p => p.Student.Id == student.Id);
                if (submission != null)
                {
                    ModelState.AddModelError("", "You have already submitted this task.");
                    return(View(taskSubmission));
                }
                if (classTask.submittingOption == "BlckBook" && (classTask.dueDate.Date == DateTime.Today && DateTime.Today.TimeOfDay > classTask.dueTime.TimeOfDay) || (DateTime.Today > classTask.dueDate.Date))
                {
                    ModelState.AddModelError("", "You cannot submit online anymore, please see your teacher.");
                    return(View(taskSubmission));
                }
                if (taskSubmission.file != null)
                {
                    var           fileName      = Path.GetFileName(taskSubmission.file.FileName);
                    SubmittedFile submittedFile = new SubmittedFile()
                    {
                        FileName       = fileName,
                        Extension      = Path.GetExtension(fileName),
                        Id             = taskSubmission.Id,
                        TaskSubmission = taskSubmission
                    };
                    taskSubmission.SubmittedFile = submittedFile;
                }

                taskSubmission.Student        = student;
                taskSubmission.ClassTask      = classTask;
                taskSubmission.submissionDate = DateTime.Now;
                db.TaskSubmissions.Add(taskSubmission);
                db.SaveChanges();
                if (taskSubmission.file != null)
                {
                    var fileName = Path.GetFileName(taskSubmission.file.FileName);
                    var path     = Path.Combine(Server.MapPath("~/App_Data/SubmittedFiles/"), taskSubmission.SubmittedFile.Id + fileName);
                    taskSubmission.file.SaveAs(path);
                }
                return(RedirectToAction("Index"));
            }
            return(View(taskSubmission));
        }
Beispiel #4
0
        private async Task <TaskSubmissionDTO> MapSubmission(Guid studentTaskId, TaskSubmission submission)
        {
            var files = new List <TaskSubmissionFileDTO>();

            foreach (var file in submission.Files)
            {
                files.Add(await MapSubmissionFile(file));
            }

            return(new TaskSubmissionDTO {
                Id = submission.Id,
                StudentTaskId = studentTaskId,
                State = submission.State,
                Review = submission.Review,
                Grading = submission.Grading,
                DateAdded = submission.DateAdded,
                Description = submission.Description,
                Files = files
            });
        }