public async Task <ServiceResponse <ProjectGradeInfoDto> > GetProjectGradeByUserAndGroup(GetProjectGradeDto getProjectGradeDto) { ServiceResponse <ProjectGradeInfoDto> response = new ServiceResponse <ProjectGradeInfoDto>(); User user = await _context.Users .Include(u => u.InstructedCourses) .FirstOrDefaultAsync(u => u.Id == GetUserId()); ProjectGroup projectGroup = await _context.ProjectGroups .Include(pg => pg.GroupMembers) .FirstOrDefaultAsync(rg => rg.Id == getProjectGradeDto.GradedProjectGroupID); User grader = await _context.Users .Include(u => u.InstructedCourses) .FirstOrDefaultAsync(u => u.Id == getProjectGradeDto.GradingUserId); if (projectGroup == null) { response.Data = null; response.Message = "There is no project group with this id"; response.Success = false; return(response); } ProjectGrade projectGrade = await _context.ProjectGrades.Include(pg => pg.GradingUser) .FirstOrDefaultAsync(pg => pg.GradingUserId == getProjectGradeDto.GradingUserId && pg.GradedProjectGroupID == getProjectGradeDto.GradedProjectGroupID); if (projectGrade == null) { response.Data = null; response.Message = "There is no such project grade"; response.Success = false; return(response); } ProjectGradeInfoDto dto = new ProjectGradeInfoDto { Id = projectGrade.Id, MaxGrade = projectGrade.MaxGrade, Grade = projectGrade.Grade, Comment = projectGrade.Description, LastEdited = projectGrade.LastEdited, userInProjectGradeDto = new UserInProjectGradeDto { Id = projectGrade.GradingUser.Id, email = projectGrade.GradingUser.Email, name = projectGrade.GradingUser.Name }, GradingUserId = user.Id, projectGroupInProjectGradeDto = new ProjectGroupInProjectGradeDto { Id = user.Id, AffiliatedSectionId = projectGrade.GradedProjectGroup.AffiliatedSectionId, AffiliatedCourseId = projectGrade.GradedProjectGroup.AffiliatedCourseId, ConfirmationState = projectGrade.GradedProjectGroup.ConfirmationState, ConfirmedUserNumber = projectGrade.GradedProjectGroup.ConfirmedUserNumber, ProjectInformation = projectGrade.GradedProjectGroup.ProjectInformation, ConfirmedGroupMembers = projectGrade.GradedProjectGroup.ConfirmedGroupMembers }, GradedProjectGroupID = projectGrade.GradedProjectGroup.Id, FileEndpoint = string.Format("ProjectGrade/DownloadById/{0}", projectGrade.Id), HasFile = projectGrade.HasFile }; response.Data = dto; response.Message = "Success"; response.Success = true; return(response); }
public async Task <ServiceResponse <ProjectGradeInfoDto> > EditProjectGrade(EditProjectGradeDto editProjectGradeDto) { ServiceResponse <ProjectGradeInfoDto> response = new ServiceResponse <ProjectGradeInfoDto>(); User user = await _context.Users .FirstOrDefaultAsync(u => u.Id == GetUserId()); ProjectGrade projectGrade = await _context.ProjectGrades .Include(pg => pg.GradedProjectGroup) .FirstOrDefaultAsync(pg => pg.Id == editProjectGradeDto.Id); ProjectGroup projectGroup = await _context.ProjectGroups.Include(pg => pg.AffiliatedCourse).Include(c => c.AffiliatedSection) .FirstOrDefaultAsync(rg => rg.Id == projectGrade.GradedProjectGroupID); if (projectGrade == null) { response.Data = null; response.Message = "There is no project grade with this Id."; response.Success = false; return(response); } if (editProjectGradeDto.MaxGrade < editProjectGradeDto.Grade) { response.Data = null; response.Message = "Grade should be less than or equal to the max grade"; response.Success = false; return(response); } projectGrade.MaxGrade = projectGrade.MaxGrade; // ask projectGrade.Grade = projectGrade.Grade; projectGrade.Description = editProjectGradeDto.Comment; projectGrade.LastEdited = editProjectGradeDto.LastEdited; // ask if (editProjectGradeDto.File != null) { var target = Path.Combine(_hostingEnvironment.ContentRootPath, string.Format("{0}/{1}/{2}/{3}/{4}", "StaticFiles/ProjectGradeFiles", projectGrade.GradedProjectGroup.AffiliatedCourseId, projectGrade.GradedProjectGroup.AffiliatedSection, projectGrade.GradedProjectGroupID, user.Id)); Directory.CreateDirectory(target); if (editProjectGradeDto.File.Length > 0) { projectGrade.HasFile = true; string oldfile = Directory.GetFiles(target).FirstOrDefault(); string extension = Path.GetExtension(editProjectGradeDto.File.FileName); var filePath = Path.Combine(target, string.Format("{0}_Section{1}_Group{2}_{3}_GroupFeedback" , projectGroup.AffiliatedCourse.Name.Trim().Replace(" ", "_"), projectGroup.AffiliatedSection, projectGroup.Id, user.Name.Trim().Replace(" ", "_")) + extension); projectGrade.FilePath = filePath; if (File.Exists(oldfile)) { File.Delete(oldfile); } using (var stream = new FileStream(filePath, FileMode.Create)) { await editProjectGradeDto.File.CopyToAsync(stream); } } } ProjectGradeInfoDto projectGradeInfoDto = new ProjectGradeInfoDto { Id = projectGrade.Id, MaxGrade = editProjectGradeDto.MaxGrade, Grade = editProjectGradeDto.Grade, Comment = editProjectGradeDto.Comment, LastEdited = editProjectGradeDto.LastEdited, userInProjectGradeDto = new UserInProjectGradeDto { Id = user.Id, email = user.Email, name = user.Name }, GradingUserId = user.Id, projectGroupInProjectGradeDto = new ProjectGroupInProjectGradeDto { Id = user.Id, AffiliatedSectionId = projectGrade.GradedProjectGroup.AffiliatedSectionId, AffiliatedCourseId = projectGrade.GradedProjectGroup.AffiliatedCourseId, ConfirmationState = projectGrade.GradedProjectGroup.ConfirmationState, ConfirmedUserNumber = projectGrade.GradedProjectGroup.ConfirmedUserNumber, ProjectInformation = projectGrade.GradedProjectGroup.ProjectInformation, ConfirmedGroupMembers = projectGrade.GradedProjectGroup.ConfirmedGroupMembers }, FileEndpoint = string.Format("ProjectGrade/DownloadById/{0}", projectGrade.Id), GradedProjectGroupID = projectGrade.GradedProjectGroup.Id, HasFile = projectGrade.HasFile }; _context.ProjectGrades.Update(projectGrade); await _context.SaveChangesAsync(); response.Data = projectGradeInfoDto; response.Message = "You successfully edited project grade"; response.Success = true; return(response); }