private async Task AssignDataPoliciesToTeamFromDataPolicyNameList(TeamModel team, List <string> applicationDataPolicies, Guid updatedById)
        {
            // The application data policy associations for this team are going to be created or overwritten, its easier to rebuild it that apply a diff.
            team.ApplicationDataPolicies = new List <TeamApplicationDataPolicyModel>();

            if (applicationDataPolicies != null && applicationDataPolicies.Count > 0)
            {
                foreach (var applicationDataPolicy in applicationDataPolicies)
                {
                    var existingApplicationDataPolicy = await applicationDataPolicyRepository.GetByNameAsync(applicationDataPolicy);

                    if (existingApplicationDataPolicy == null)
                    {
                        throw new ItemNotFoundException($"Unable to find an application data policy with name: '{applicationDataPolicy}' when attempting to assing the application data policy to team '{team.Name}'");
                    }

                    logger.Debug($"Adding application data policy '{applicationDataPolicy}' to team: {team.Name}");

                    team.ApplicationDataPolicies.Add(new TeamApplicationDataPolicyModel
                    {
                        Team = team,
                        ApplicationDataPolicy = existingApplicationDataPolicy,
                        ChangedBy             = updatedById
                    });
                }
            }
        }
        private async Task AddSpecificApplicationDataPolyFromSecurityContractToApplication(ApplicationModel application, SecurityContractApplicationDataPolicy dataPolicyToAdd, Guid updatedById, bool dryRun, SecurityContractDryRunResult securityContractDryRunResult)
        {
            logger.Debug($"[applications.fullname: '{application.Name}'].[dataPolicies.name: '{dataPolicyToAdd.Name}']: Adding data policy '{dataPolicyToAdd.Name}' to application '{application.Name}'.");
            var existingDataPolicy = application.ApplicationDataPolicies.Find(adp => adp.Name == dataPolicyToAdd.Name);

            if (existingDataPolicy == null)
            {
                //check that the data policy does not exist within other applications.
                var dataPolicyAttachedToOtherApplication = await applicationDataPolicyRepository.GetByNameAsync(dataPolicyToAdd.Name);

                if (dataPolicyAttachedToOtherApplication != null)
                {
                    var errorMessage = $"[applications.fullname: '{application.Name}'].[dataPolicies.name: '{dataPolicyToAdd.Name}']: Data policy with name alreay exists in another application. Not adding it!";
                    if (dryRun)
                    {
                        securityContractDryRunResult.ValidationErrors.Add(errorMessage);
                        return;
                    }

                    throw new ItemNotProcessableException(errorMessage);
                }

                logger.Debug($"[applications.fullname: '{application.Name}'].[dataPolicies.name: '{dataPolicyToAdd.Name}']: Data policy '{dataPolicyToAdd.Name}' was not assigned to application '{application.Name}'. Adding it.");
                application.ApplicationDataPolicies.Add(new ApplicationDataPolicyModel
                {
                    Name        = dataPolicyToAdd.Name,
                    Description = dataPolicyToAdd.Description,
                    ChangedBy   = updatedById
                });
            }
            else
            {
                logger.Debug($"[applications.fullname: '{application.Name}'].[dataPolicies.name: '{dataPolicyToAdd.Name}']: Data policy '{dataPolicyToAdd.Name}' is currently assigned to application '{application.Name}'. Updating it.");
                // Bind possible changes to the editable components of the data policy.
                existingDataPolicy.Description = dataPolicyToAdd.Description;
                existingDataPolicy.ChangedBy   = updatedById;
            }
        }