Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }