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"); } }
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)); }
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 }); }