public void UpdateTrackingDomains(IEnumerable<string> hostNames, IOenRepository repository) { if (!domaingroup_id.HasValue) { throw new Exception("No Domain Group assigned"); } var trackingDomains = (from td in repository.Retrieve<TrackingDomain>().Where(t => t.DeliveryGroupId == deliveryGroup_id) join d in repository.GetDomains() on td.DomainId equals d.domain_id select new { TrackingDomain = td, Domain = d }).ToList(); trackingDomains.ForEach(t => { t.TrackingDomain.Enabled = hostNames.Any(vt => vt.ToLower() == t.Domain.host.ToLower()); }); var existingHostNames = trackingDomains.Where(t => t.Domain != null).Select(t => t.Domain.host.ToLower()).Distinct(); var trackingDomainsToInsert = hostNames.Where(t => !existingHostNames.Contains(t.ToLower())).ToList(); // Once for validation so none are created unless all are valid trackingDomainsToInsert.ForEach(t => { var domain = repository.GetDomains().FirstOrDefault(d => d.host == t && d.domainGroup_id != domaingroup_id); if (domain != null) { throw new Exception("Tracking Domain in use by a different group"); } }); trackingDomainsToInsert.ForEach(t => { var domain = repository.GetDomains().FirstOrDefault(d => d.host == t); if (domain == null) { domain = repository.AddDomain(new Domain { host = t, domainGroup_id = domaingroup_id, enabled = true }); repository.SaveChanges(); } repository.AddTrackingDomain(new TrackingDomain() { Enabled = true, DeliveryGroupId = deliveryGroup_id, DomainId = domain.domain_id }); }); }
///////////////////////////////////////////////////////////////////////////// public void UpdateDomain(string domainName, IOenRepository repository) { if (!domaingroup_id.HasValue) { throw new Exception("No Domain Group assigned"); } var domain = repository.GetDomains().FirstOrDefault(d => d.domainGroup_id == domaingroup_id && d.enabled); if (domain == null || !String.Equals(domain.host, domainName, StringComparison.CurrentCultureIgnoreCase)) { var newDomain = repository.GetDomains().FirstOrDefault(d => d.host == domainName); if (newDomain != null && newDomain.domainGroup_id.HasValue && newDomain.domainGroup_id != domaingroup_id) { throw new Exception("Domain is in use"); } if (domain != null) { domain.enabled = false; domain.domainGroup_id = null; } if (newDomain == null) { repository.AddDomain(new Domain { host = domainName, domainGroup_id = domaingroup_id, enabled = true }); } else { newDomain.enabled = true; } } }