public async Task <IActionResult> GetByUsersAndGroup(int projectGroupId, int reviewerId, int revieweeId) { GetPeerGradeDto dto = new GetPeerGradeDto { ProjectGroupId = projectGroupId, ReviewerId = reviewerId, RevieweeId = revieweeId }; ServiceResponse <PeerGradeInfoDto> response = await _peerGradeService.GetPeerGradeByUsersAndGroup(dto); if (response.Success) { return(Ok(response)); } return(NotFound(response)); }
public async Task <ServiceResponse <PeerGradeInfoDto> > GetPeerGradeByUsersAndGroup(GetPeerGradeDto getPeerGradeDto) { ServiceResponse <PeerGradeInfoDto> response = new ServiceResponse <PeerGradeInfoDto>(); User user = await _context.Users .Include(u => u.InstructedCourses) .FirstOrDefaultAsync(u => u.Id == GetUserId()); ProjectGroup projectGroup = await _context.ProjectGroups.Include(g => g.AffiliatedCourse).ThenInclude(c => c.PeerGradeAssignment) .Include(g => g.GroupMembers) .FirstOrDefaultAsync(rg => rg.Id == getPeerGradeDto.ProjectGroupId); if (projectGroup == null) { response.Data = null; response.Message = "There is no project group with this id"; response.Success = false; return(response); } if (!IsUserInGroup(projectGroup, getPeerGradeDto.ReviewerId)) { response.Data = null; response.Message = "There is no user with reviewerId in group"; response.Success = false; return(response); } if (!IsUserInGroup(projectGroup, getPeerGradeDto.RevieweeId)) { response.Data = null; response.Message = "There is no user with revieweeId in group"; response.Success = false; return(response); } PeerGradeAssignment pga = await _context.PeerGradeAssignments .FirstOrDefaultAsync(pga => pga.CourseId == projectGroup.AffiliatedCourseId); if (pga == null) { response.Data = null; response.Message = "Course doesn't have a peer grade assignment"; response.Success = false; return(response); } if (user == null || (!doesUserInstruct(user, projectGroup.AffiliatedCourseId) && user.Id != getPeerGradeDto.ReviewerId)) { response.Data = null; response.Message = "You are not authorized to see this peer grade"; response.Success = false; return(response); } PeerGrade peerGrade = await _context.PeerGrades .FirstOrDefaultAsync(pg => pg.ReviewerId == getPeerGradeDto.ReviewerId && pg.RevieweeId == getPeerGradeDto.RevieweeId && pg.ProjectGroupId == getPeerGradeDto.ProjectGroupId); if (peerGrade == null) { response.Data = null; response.Message = "There is no such peer grade"; response.Success = false; return(response); } PeerGradeInfoDto dto = new PeerGradeInfoDto { Id = peerGrade.Id, ProjectGroupId = peerGrade.ProjectGroupId, ReviewerId = peerGrade.ReviewerId, RevieweeId = peerGrade.RevieweeId, MaxGrade = peerGrade.MaxGrade, Grade = peerGrade.Grade, Comment = peerGrade.Comment, LastEdited = peerGrade.LastEdited }; response.Data = dto; response.Message = "Success"; response.Success = true; return(response); }