public async Task <ServiceResponse <GetOzgurDto> > GetOzgur(int groupId) { ServiceResponse <GetOzgurDto> response = new ServiceResponse <GetOzgurDto>(); User user = await _context.Users.FirstOrDefaultAsync(u => u.Id == GetUserId()); Assignment assignment = await _context.Assignments .Include(pg => pg.Submissions).ThenInclude(s => s.Comments).ThenInclude(c => c.CommentedUser) .Include(pg => pg.Submissions).ThenInclude(s => s.AffiliatedAssignment) .Include(pg => pg.Submissions).ThenInclude(s => s.AffiliatedGroup) .Include(pg => pg.AfilliatedCourse).ThenInclude(c => c.Instructors) .FirstOrDefaultAsync(s => s.Id == groupId); if (assignment == null) { response.Data = null; response.Message = "There is no such project group"; response.Success = false; return(response); } List <int> instrs = assignment.AfilliatedCourse.Instructors.Select(i => i.UserId).ToList(); List <Submission> submissions = assignment.Submissions.ToList(); HashSet <int> graderIds = new HashSet <int>(); foreach (Submission s in submissions) { List <Comment> comments = s.Comments.ToList(); foreach (Comment c in comments) { if (instrs.Contains(c.CommentedUserId)) { graderIds.Add(c.CommentedUserId); } } } List <string> graderNames = new List <string>(); foreach (int id in graderIds) { graderNames.Add(_context.Users.FirstOrDefault(u => u.Id == id).Name); } graderNames.Add("Students"); graderIds.Add(-1); GetOzgurDto getOzgurDto = new GetOzgurDto(); getOzgurDto.graders = graderNames; List <OzgurStatDto> ozgurStatDtos = new List <OzgurStatDto>(); foreach (Submission s in submissions) { OzgurStatDto ozgurStatDto = new OzgurStatDto(); ozgurStatDto.StatName = s.AffiliatedGroup.Name; ozgurStatDto.Grades = new List <decimal>(); foreach (int id in graderIds) { ServiceResponse <decimal> grade = await _submissionService.GetGradeWithGraderId(s.Id, id); ozgurStatDto.Grades.Add(grade.Data); } ozgurStatDtos.Add(ozgurStatDto); } getOzgurDto.ozgurStatDtos = ozgurStatDtos; // List<int> graderIds = submission.Comments.Select(c => c.CommentedUserId).ToList(); response.Data = getOzgurDto; return(response); }
public async Task <ServiceResponse <GetOzgurDto> > GetOzgur(int courseId) { ServiceResponse <GetOzgurDto> response = new ServiceResponse <GetOzgurDto>(); User user = await _context.Users.FirstOrDefaultAsync(u => u.Id == GetUserId()); Course course = await _context.Courses .Include(pg => pg.Sections).ThenInclude(s => s.ProjectGroups).ThenInclude(c => c.ProjectGrades).ThenInclude(pg => pg.GradingUser) .Include(pg => pg.Instructors)//.ThenInclude(s => s.AffiliatedAssignment) .FirstOrDefaultAsync(s => s.Id == courseId); if (course == null) { response.Data = null; response.Message = "There is no such course"; response.Success = false; return(response); } List <Section> sections = course.Sections.ToList(); List <ProjectGroup> projectGroups = new List <ProjectGroup>(); foreach (Section s in sections) { List <ProjectGroup> tempGroups = s.ProjectGroups.ToList(); projectGroups.AddRange(tempGroups); } List <int> instrs = course.Instructors.Select(i => i.UserId).ToList(); HashSet <int> graderIds = new HashSet <int>(); foreach (ProjectGroup pg in projectGroups) { List <ProjectGrade> projectGrades = pg.ProjectGrades.ToList(); foreach (ProjectGrade pgrade in projectGrades) { if (instrs.Contains(pgrade.GradingUserId)) { graderIds.Add(pgrade.GradingUserId); } } } List <string> graderNames = new List <string>(); foreach (int id in graderIds) { graderNames.Add(_context.Users.FirstOrDefault(u => u.Id == id).Name); } graderNames.Add("Students"); graderIds.Add(-1); GetOzgurDto getOzgurDto = new GetOzgurDto(); getOzgurDto.graders = graderNames; List <OzgurStatDto> ozgurStatDtos = new List <OzgurStatDto>(); foreach (ProjectGroup pg in projectGroups) { OzgurStatDto ozgurStatDto = new OzgurStatDto(); ozgurStatDto.StatName = pg.Name; ozgurStatDto.Grades = new List <decimal>(); foreach (int id in graderIds) { ServiceResponse <decimal> grade = await _projectGroupService.GetGradeWithGraderId(pg.Id, id); ozgurStatDto.Grades.Add(grade.Data); } ozgurStatDtos.Add(ozgurStatDto); } getOzgurDto.ozgurStatDtos = ozgurStatDtos; // List<int> graderIds = submission.Comments.Select(c => c.CommentedUserId).ToList(); response.Data = getOzgurDto; return(response); }