private ReleaseDefinition CreateReleaseDefinition(Models.Releases.ReleaseDefinition releaseDefinition)
        {
            var dto = new ReleaseDefinition
            {
                Name = releaseDefinition.name,
                Id   = releaseDefinition.id
            };

            Artifact artifact = releaseDefinition.artifacts?.FirstOrDefault(x => x.isPrimary);

            if (artifact?.definitionReference?.project != null)
            {
                IdNameReference projectId = artifact.definitionReference.project;
                dto.Project = projectRepository.GetProject(projectId.id);
            }

            return(dto);
        }
        protected override void Update()
        {
            var releases = new ConcurrentStack <ReleaseDefinition>();

            Parallel.ForEach(projectRepository.GetAll(), new ParallelOptions {
                MaxDegreeOfParallelism = AppSettings.MAX_DEGREE_OF_PARALLELISM
            }, project =>
            {
                List <Models.Releases.ReleaseDefinition> releaseDefinitions = GetAsync.FetchResponseList <Models.Releases.ReleaseDefinition>(requestData, $"{requestData.BaseReleaseManagerAddress}/{project.Id}/_apis/Release/definitions?api-version=3.0-preview.1", Logger).Result;
                if (releaseDefinitions != null)
                {
                    Parallel.ForEach(releaseDefinitions, new ParallelOptions {
                        MaxDegreeOfParallelism = AppSettings.MAX_DEGREE_OF_PARALLELISM
                    }, releaseDefinition =>
                    {
                        Models.Releases.ReleaseDefinition populatedReleaseDefinition = GetAsync.Fetch <Models.Releases.ReleaseDefinition>(requestData, releaseDefinition.url).Result;
                        releases.Push(CreateReleaseDefinition(populatedReleaseDefinition));
                    });
                }
            });

            releaseDefinitionRepository.Update(releases);
        }