public async Task <IActionResult> Vote(int mergeRequestId, bool _accept) { VoteMergeRequestDto dto = new VoteMergeRequestDto { Id = mergeRequestId, accept = _accept }; ServiceResponse <MergeRequestInfoDto> response = await _mergeRequestService.Vote(dto); if (response.Success) { return(Ok(response)); } return(NotFound(response)); }
public async Task <ServiceResponse <MergeRequestInfoDto> > Vote(VoteMergeRequestDto mergeRequestDto) { ServiceResponse <MergeRequestInfoDto> response = new ServiceResponse <MergeRequestInfoDto>(); MergeRequest mergeRequest = await _context.MergeRequests.Include(mr => mr.ReceiverGroup) .ThenInclude(pg => pg.GroupMembers) .Include(mr => mr.SenderGroup) .ThenInclude(pg => pg.GroupMembers) .FirstOrDefaultAsync(mr => mr.Id == mergeRequestDto.Id); User user = await _context.Users .FirstOrDefaultAsync(u => u.Id == GetUserId()); if (mergeRequest == null) { response.Data = null; response.Message = "There is no such merge request"; response.Success = false; return(response); } if (mergeRequest.Resolved) { response.Data = null; response.Message = "You cannot vote because the merge request is resolved already"; response.Success = false; return(response); } if (mergeRequest.Accepted) { response.Data = null; response.Message = "The merge request is accepted already"; response.Success = false; return(response); } if (!mergeRequest.ReceiverGroup.GroupMembers.Any(pgu => pgu.UserId == GetUserId()) && !mergeRequest.SenderGroup.GroupMembers.Any(pgu => pgu.UserId == GetUserId())) { response.Data = null; response.Message = "You cannot vote because you are not in the sender or receiver group"; response.Success = false; return(response); } if (!IsUserInString(mergeRequest.VotedStudents, GetUserId()) && mergeRequestDto.accept == false) { mergeRequest.Resolved = true; _context.MergeRequests.Update(mergeRequest); await _context.SaveChangesAsync(); response.Message = "Merge request is cancelled by the negative vote"; return(response); } if (IsUserInString(mergeRequest.VotedStudents, GetUserId()) && mergeRequestDto.accept == false) { mergeRequest.VotedStudents = RemoveUserFromString(mergeRequest.VotedStudents, GetUserId()); _context.MergeRequests.Update(mergeRequest); await _context.SaveChangesAsync(); response.Message = "Your vote is taken back successfully."; return(response); } if (IsUserInString(mergeRequest.VotedStudents, GetUserId()) && mergeRequestDto.accept == true) { response.Success = false; response.Message = "User is already voted accepted for this request"; return(response); } int acceptedNumber = 0; string[] voters = mergeRequest.VotedStudents.Split(' '); foreach (string s in voters) { if (s != "" && s != " ") { acceptedNumber++; } } int maxSize = (await _context.Courses.FirstOrDefaultAsync(c => c.Id == mergeRequest.SenderGroup.AffiliatedCourseId)).MaxGroupSize; acceptedNumber++; mergeRequest.VotedStudents = AddUserToString(mergeRequest.VotedStudents, GetUserId()); if (acceptedNumber >= mergeRequest.ReceiverGroup.GroupMembers.Count + mergeRequest.SenderGroup.GroupMembers.Count && mergeRequest.ReceiverGroup.GroupMembers.Count + mergeRequest.SenderGroup.GroupMembers.Count <= maxSize) { int newSize = mergeRequest.ReceiverGroup.GroupMembers.Count + mergeRequest.SenderGroup.GroupMembers.Count; mergeRequest.Accepted = true; _context.MergeRequests.Update(mergeRequest); await _context.SaveChangesAsync(); int recId = mergeRequest.ReceiverGroupId; int senId = mergeRequest.SenderGroupId; var tmp = await _projectGroupService.CompleteMergeRequest(mergeRequest.Id); if (newSize >= maxSize) { await DeleteAllMergeRequests(new DeleteAllMergeRequestsDto { projectGroupId = recId }); await DeleteAllMergeRequests(new DeleteAllMergeRequestsDto { projectGroupId = senId }); } // _context.MergeRequests.Remove ( mergeRequest ); await _context.SaveChangesAsync(); response.Message = "Merge request is accepted from all members and groups are merged."; return(response); } _context.MergeRequests.Update(mergeRequest); await _context.SaveChangesAsync(); response.Data = new MergeRequestInfoDto { Id = mergeRequestDto.Id, Accepted = mergeRequest.Accepted, Resolved = mergeRequest.Resolved, VotedStudents = mergeRequest.VotedStudents }; response.Message = "You succesfully voted"; return(response); }