3scale/porta

View on GitHub
app/workers/process_domain_events_worker.rb

Summary

Maintainability
A
0 mins
Test Coverage
class ProcessDomainEventsWorker
  include Sidekiq::Job

  def perform(event_id)
    event = EventStore::Repository.find_event!(event_id)
    events = find_providers(event).map { |provider| Domains::ProviderDomainsChangedEvent.create(provider, event) }
    events += find_proxies(event).map { |proxy| Domains::ProxyDomainsChangedEvent.create(proxy, event) }

    events.each(&:publish)
  end


  def find_providers(event)
    domains = event.domains
    providers = Account.providers

    providers = case event
                when Domains::ProviderDomainsChangedEvent
                  providers.where.not(id: event.provider.id)
                else
                  providers
                end

    providers.where.has { domain.in(domains).or self_domain.in(domains) }
  end

  def find_proxies(event)
    domains = event.domains
    proxies = Proxy

    proxies = case event
              when Domains::ProxyDomainsChangedEvent
                proxies.where.not(id: event.proxy.id)
              else
                proxies
              end

    proxies.where.has { production_domain.in(domains).or staging_domain.in(domains) }
  end

  def self.enqueue(event)
    return unless ThreeScale.config.onpremises
    return if event.parent_event?

    perform_async(event.event_id)
  end
end