private async Task <List <ReleaseApprovalModel> > GetAllApprovalsByProjectIdAndGroupId(string projectId, string groupId) { // get continuation token string continuationToken = "0"; using (DbDevOpsDashContext ctx = new DbDevOpsDashContext()) { if (ctx.ReleaseApprovals.Where(r => r.ProjectId == projectId && r.ApproverId == groupId && r.IsActive == true).Any()) { continuationToken = ctx.ReleaseApprovals .Where(r => r.ProjectId == projectId && r.ApproverId == groupId && r.IsActive == true) .Max(r => r.ApprovalId + 1).ToString(); } } List <ReleaseApprovalModel> _fromApi = new List <ReleaseApprovalModel>(); while (true) { var _uri = _uriHelper.Get(Methods.ReleaseApprovals, new UriParameters() { project = projectId, continuationToken = continuationToken, queryOrder = "ascending", assignedToFilter = groupId, statusFilter = "undefined", }); HttpClientHelper request = new HttpClientHelper(_credentials, _uri); var resp = await request.GetAsync(); continuationToken = resp.ContinuationToken; string json = resp.Content; ReleaseApprovalReference.Root approvals = JsonConvert.DeserializeObject <ReleaseApprovalReference.Root>(json); var _approvals = approvals.value.Select(p => new ReleaseApprovalModel() { ApprovalId = p.id, ApprovalType = p.approvalType, Approver = p.approver.displayName, ApproverDescriptor = p.approver.descriptor, ApproverId = p.approver.id, ApproverImageUrl = p.approver.imageUrl, ApproverUniqueName = p.approver.uniqueName, ApproverUrl = p.approver.url, Attempt = p.attempt, Comments = p.comments, CreatedOn = p.createdOn, DefinitionId = p.releaseDefinition.id, DefinitionName = p.releaseDefinition.name, DefinitionPath = p.releaseDefinition.path, DefinitionUrl = p.releaseDefinition.url, EnvironmentId = p.releaseEnvironment.id, EnvironmentName = p.releaseEnvironment.name, EnvironmentUrl = p.releaseEnvironment.url, IsAutomated = p.isAutomated, IsNotificationOn = p.isNotificationOn, Rank = p.rank, ReleaseId = p.release.id, ReleaseName = p.release.name, ReleaseUrl = p.release.url, Revision = p.revision, Status = p.status, TrialNumber = p.trialNumber, Url = p.url, ProjectId = projectId, Id = 0, IsActive = true, LoadDate = DateTime.Now, ModifiedOn = p.modifiedOn, ApprovedBy = p.approvedBy == null ? null : p.approvedBy.displayName, ApprovedByDescriptor = p.approvedBy == null ? null : p.approvedBy.descriptor, ApprovedById = p.approvedBy == null ? null : p.approvedBy.id, ApprovedByImageUrl = p.approvedBy == null ? null : p.approvedBy.imageUrl, ApprovedByUniqueName = p.approvedBy == null ? null : p.approvedBy.uniqueName, ApprovedByUrl = p.approvedBy == null ? null : p.approvedBy.url, }).ToList(); _fromApi.AddRange(_approvals); if (string.IsNullOrEmpty(continuationToken)) { break; } } return(_fromApi); }
public async Task <int> CheckPendingApprovalsAsync() { int ret = 0; if (_utils.AlreadyBeenExecuted(Methods.ReleasePendingApprovals)) { await _utils.SaveLoadHistory(Methods.ReleasePendingApprovals, ret, true, "load has already been successfully executed"); return(0); } // list DbDevOpsDashContext approvalsCtx = new DbDevOpsDashContext(); var _pendingsInDb = await approvalsCtx.ReleaseApprovals .Where(p => p.IsActive == true && p.Status.Contains("pending")) .OrderBy(p => p.Id) .AsNoTracking().ToListAsync(); await approvalsCtx.DisposeAsync(); List <ReleaseApprovalModel> _approvalsFromApi = new List <ReleaseApprovalModel>(); using (DbDevOpsDashContext ctx = new DbDevOpsDashContext()) { try { foreach (var a in _pendingsInDb) { var _uri = _uriHelper.Get(Methods.ReleasePendingApprovals, new UriParameters() { project = a.ProjectId, assignedToFilter = a.ApproverId, statusFilter = "undefined", releaseIdsFilter = a.ReleaseId.ToString(), }); HttpClientHelper request = new HttpClientHelper(_credentials, _uri); var resp = await request.GetAsync(); string json = resp.Content; ReleaseApprovalReference.Root _fromApi = JsonConvert.DeserializeObject <ReleaseApprovalReference.Root>(json); var _approvals = _fromApi.value.Select(p => new ReleaseApprovalModel() { ApprovalId = p.id, ApprovalType = p.approvalType, Approver = p.approver.displayName, ApproverDescriptor = p.approver.descriptor, ApproverId = p.approver.id, ApproverImageUrl = p.approver.imageUrl, ApproverUniqueName = p.approver.uniqueName, ApproverUrl = p.approver.url, Attempt = p.attempt, Comments = p.comments, CreatedOn = p.createdOn, DefinitionId = p.releaseDefinition.id, DefinitionName = p.releaseDefinition.name, DefinitionPath = p.releaseDefinition.path, DefinitionUrl = p.releaseDefinition.url, EnvironmentId = p.releaseEnvironment.id, EnvironmentName = p.releaseEnvironment.name, EnvironmentUrl = p.releaseEnvironment.url, IsAutomated = p.isAutomated, IsNotificationOn = p.isNotificationOn, Rank = p.rank, ReleaseId = p.release.id, ReleaseName = p.release.name, ReleaseUrl = p.release.url, Revision = p.revision, Status = p.status, TrialNumber = p.trialNumber, Url = p.url, ProjectId = a.ProjectId, Id = 0, IsActive = true, LoadDate = DateTime.Now, ModifiedOn = p.modifiedOn, ApprovedBy = p.approvedBy == null ? null : p.approvedBy.displayName, ApprovedByDescriptor = p.approvedBy == null ? null : p.approvedBy.descriptor, ApprovedById = p.approvedBy == null ? null : p.approvedBy.id, ApprovedByImageUrl = p.approvedBy == null ? null : p.approvedBy.imageUrl, ApprovedByUniqueName = p.approvedBy == null ? null : p.approvedBy.uniqueName, ApprovedByUrl = p.approvedBy == null ? null : p.approvedBy.url, }); _approvalsFromApi.AddRange(_approvals); } // get ID from Db foreach (var inDb in _pendingsInDb) { if (_approvalsFromApi.Where(fromApi => fromApi.ProjectId == inDb.ProjectId && fromApi.ReleaseId == inDb.ReleaseId && fromApi.ApprovalId == inDb.ApprovalId).Any()) { _approvalsFromApi.Where(fromApi => fromApi.ProjectId == inDb.ProjectId && fromApi.ReleaseId == inDb.ReleaseId && fromApi.ApprovalId == inDb.ApprovalId).FirstOrDefault().Id = inDb.Id; } } // to update var _toUpdate = _approvalsFromApi .Intersect(_pendingsInDb, new ReleaseApprovalEqualityComparer()) .Select(j => new ReleaseApprovalModel { ReleaseId = j.ReleaseId, CreatedOn = j.CreatedOn, DefinitionId = j.DefinitionId, DefinitionName = j.DefinitionName, DefinitionPath = j.DefinitionPath, DefinitionUrl = j.DefinitionUrl, Id = j.Id, IsActive = j.IsActive, LoadDate = DateTime.Now, ModifiedOn = j.ModifiedOn, ProjectId = j.ProjectId, ApprovalId = j.ApprovalId, Status = j.Status, Url = j.Url, ApprovedByDescriptor = j.ApprovedByDescriptor, ApprovalType = j.ApprovalType, ApprovedBy = j.ApprovedBy, ApprovedById = j.ApprovedById, ApprovedByImageUrl = j.ApprovedByImageUrl, ApprovedByUniqueName = j.ApprovedByUniqueName, ApprovedByUrl = j.ApprovedByUrl, Approver = j.Approver, ApproverDescriptor = j.ApproverDescriptor, ApproverId = j.ApproverId, ApproverImageUrl = j.ApproverImageUrl, ApproverUniqueName = j.ApproverUniqueName, ApproverUrl = j.ApproverUrl, Attempt = j.Attempt, Comments = j.Comments, EnvironmentId = j.EnvironmentId, EnvironmentName = j.EnvironmentName, EnvironmentUrl = j.EnvironmentUrl, IsAutomated = j.IsAutomated, IsNotificationOn = j.IsNotificationOn, Rank = j.Rank, ReleaseName = j.ReleaseName, ReleaseUrl = j.ReleaseUrl, Revision = j.Revision, TrialNumber = j.TrialNumber, }); ret = _toUpdate.Count(); ctx.ReleaseApprovals.UpdateRange(_toUpdate); // history await ctx.LoadHistory.AddAsync(_utils.LoadHistoryHelper(Methods.ReleasePendingApprovals, ret, true, "", null, null)); await ctx.SaveChangesAsync(); } catch (Exception ex) { throw ex; } } return(ret); }