public async Task <IActionResult> Cancel(int mergeRequestId) { CancelMergeRequestDto dto = new CancelMergeRequestDto { Id = mergeRequestId }; ServiceResponse <string> response = await _mergeRequestService.CancelMergeRequest(dto); if (response.Success) { return(Ok(response)); } return(NotFound(response)); }
public async Task <ServiceResponse <string> > CancelMergeRequest(CancelMergeRequestDto mergeRequestDto) { ServiceResponse <string> response = new ServiceResponse <string>(); User user = await _context.Users .Include(u => u.ProjectGroups) .FirstOrDefaultAsync(u => u.Id == GetUserId()); MergeRequest mergeRequest = await _context.MergeRequests .FirstOrDefaultAsync(mr => mr.Id == mergeRequestDto.Id); if (mergeRequest == null) { response.Data = "Not allowed"; response.Message = "There is no merge request with this Id"; response.Success = false; return(response); } if (user == null) { response.Data = "Not allowed"; response.Message = "There is no user with this Id"; response.Success = false; return(response); } ProjectGroup senderGroup = await _context.ProjectGroups .FirstOrDefaultAsync(sg => sg.Id == mergeRequest.SenderGroupId); ProjectGroup receiverGroup = await _context.ProjectGroups .FirstOrDefaultAsync(rg => rg.Id == mergeRequest.ReceiverGroupId); bool isUserInSender = senderGroup.GroupMembers.Any(pgu => pgu.UserId == GetUserId()); if (!isUserInSender) { response.Data = "Not allowed"; response.Message = "You are not authorized to cancel this merge request"; response.Success = false; return(response); } if (mergeRequest.Accepted) { response.Data = "Not allowed"; response.Message = "The merge request is already accepted. So you can't cancel it"; response.Success = false; return(response); } if (mergeRequest.Resolved) { response.Data = "Not allowed"; response.Message = "The merge request is already resolved. So you can't cancel it"; response.Success = false; return(response); } _context.MergeRequests.Remove(mergeRequest); await _context.SaveChangesAsync(); if (senderGroup != null) { _context.ProjectGroups.Update(senderGroup); await _context.SaveChangesAsync(); } if (receiverGroup != null) { _context.ProjectGroups.Update(receiverGroup); await _context.SaveChangesAsync(); } response.Data = "Successful"; response.Message = "Merge request is successfully cancelled"; response.Success = true; return(response); }