Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }