SirenOfShame.Lib.Watcher.RulesEngine.AddAnyNewPeopleToSettings C# (CSharp) Method

AddAnyNewPeopleToSettings() private method

private AddAnyNewPeopleToSettings ( IEnumerable changedBuildStatuses ) : void
changedBuildStatuses IEnumerable
return void
        private void AddAnyNewPeopleToSettings(IEnumerable<BuildStatus> changedBuildStatuses)
        {
            var buildStatusesWithNewPeople = from buildStatus in changedBuildStatuses
                                             join setting in _settings.CiEntryPointSettings.SelectMany(i => i.BuildDefinitionSettings) on buildStatus.BuildDefinitionId equals setting.Id
                                             where !setting.ContainsPerson(buildStatus)
                                                && !string.IsNullOrEmpty(buildStatus.RequestedBy)
                                             select new { buildStatus, setting };

            var buildStatusesWithNewPeopleList = buildStatusesWithNewPeople
                .GroupBy(i => i.buildStatus.RequestedBy)
                .Select(i => i.First())
                .ToList();
            if (!buildStatusesWithNewPeopleList.Any()) return;

            var allExistingPeople = _settings.CiEntryPointSettings
                .SelectMany(eps => eps.BuildDefinitionSettings)
                .SelectMany(bds => bds.People)
                .Distinct().ToList();
            var newPeople = buildStatusesWithNewPeopleList
                .Select(s => s.buildStatus.RequestedBy)
                .Where(p => allExistingPeople.All(p1 => p1 != p)).ToList();

            buildStatusesWithNewPeopleList
                .ForEach(bss => bss.setting.People.Add(bss.buildStatus.RequestedBy));
            _settings.Save();

            newPeople.ForEach(InvokeNewUser);
        }