/// <summary> /// Gets submission with fewest FailedTests and Newest SubmissionTime /// </summary> public TeacherSubmissionViewModel GetBestSubmissionFromSubmissionList(List <TeacherSubmissionViewModel> submissions) { var bestSubmission = new TeacherSubmissionViewModel(); foreach (var submission in submissions) { if (submission.FailedTests < bestSubmission.FailedTests) { bestSubmission = submission; } else if (bestSubmission.FailedTests == submission.FailedTests && bestSubmission.SubmissionTime < submission.SubmissionTime) { bestSubmission = submission; } } return(bestSubmission); }
/// <summary> /// Get all assignment groups for a specific assignment /// </summary> public List <TeacherAssignmentGroupViewModel> GetAssignmentGroups(int assignmentId) { var groupQuery = _db.AssignmentGroups.Where(x => x.AssignmentId == assignmentId); var groupNumberSet = new HashSet <int>(); var assignmentGroupList = new List <TeacherAssignmentGroupViewModel>(); foreach (var student in groupQuery) { groupNumberSet.Add(student.GroupNumber); } foreach (var group in groupNumberSet) { var assignmentGroup = new TeacherAssignmentGroupViewModel { GroupNumber = group, Names = new List <string>(), Submissions = new List <TeacherSubmissionViewModel>(), StudentIds = new List <string>() }; var studentsGroupQuery = _db.AssignmentGroups.Where(x => x.GroupNumber == group && x.AssignmentId == assignmentId); foreach (var student in studentsGroupQuery) { assignmentGroup.StudentIds.Add(student.UserId); assignmentGroup.Names.Add(student.AspNetUser.FullName); } foreach (var studentId in assignmentGroup.StudentIds) { var submissions = _db.Submissions.Where(x => x.StudentId == studentId && x.AssignmentId == assignmentId).OrderByDescending(x => x.Time); if (submissions.Any()) { foreach (var submission in submissions) { var model = new TeacherSubmissionViewModel { Id = submission.Id, SubmissionTime = submission.Time, OriginalFilename = submission.OriginalFileName }; if (submission.FailedTests.HasValue) { model.FailedTests = submission.FailedTests.Value; } if (submission.SubmissionGrade != null) { model.SubmissionGrade = submission.SubmissionGrade.Grade; } assignmentGroup.Submissions.Add(model); } } } // Get best submission assignmentGroup.BestSubmission = GetBestSubmissionFromSubmissionList(assignmentGroup.Submissions); assignmentGroupList.Add(assignmentGroup); } return(assignmentGroupList); }