public async Task <IActionResult> SubmitAssignment(SubmissionInputViewModel input) { StudentDataService studentDataService = new StudentDataService(dbContext); Student student = studentDataService.GetStudentById(input.UserId); bool hasAccess = false; foreach (StudentClass studentClass in student.StudentClasses) { if (studentClass.ClassId == input.ClassId) { hasAccess = true; } } if (ModelState.IsValid && hasAccess) { Submission submission = new Submission(); submission.Input.SourceCode = input.SourceCode; submission.Input.Language = input.Language; submission.AssignmentId = input.AssignmentId; submission.UserId = input.UserId; submission.SubmissionTime = DateTime.Now; SubmissionDataService submissionService = new SubmissionDataService(dbContext); submissionService.AddSubmission(submission); await dbContext.SaveChangesAsync(); // SubmissionId now set on local submission AssignmentDataService assignmentDataService = new AssignmentDataService(dbContext); Assignment assignment = assignmentDataService.GetAssignmentById(submission.AssignmentId); assignment.Submissions.Add(submission); GraderMethod.GradeSubmission(submission, dbContext); submission.Output.Runtime = assignment.TimeLimit; if (submission.Compile()) { submission.RunAndCompare(); submission.GradeTestCases(); submission.MaxRunTime(); } dbContext.Submissions.Update(submission); dbContext.Assignments.Update(assignment); await dbContext.SaveChangesAsync(); submission.deleteJunkFiles(); return(RedirectToAction("SubmissionDetails", "Assignment", new { id = submission.SubmissionId })); } return(RedirectToAction("UnAuthorized", "Home")); }