Merge pull request #2056 from internetee/1851-validate-estonian-company-data-from-business-registry

optimize searching
This commit is contained in:
Timo Võhmar 2021-06-22 13:07:25 +03:00 committed by GitHub
commit d20a9406be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -3,37 +3,32 @@ HEADERS = %w[domain id name code registrar].freeze
namespace :contacts do namespace :contacts do
desc 'Starts collect invalid validation contacts' desc 'Starts collect invalid validation contacts'
task scan_org: :environment do task scan_org: :environment do
contacts = [] csv = CSV.open('invalid_business_contacts.csv', 'w')
csv << HEADERS
Contact.where(ident_type: 'org').each do |contact| Contact.where(ident_type: 'org').find_in_batches do |contact_group|
contacts << contact unless checking_contacts(contact) contact_group.each do |contact|
next if checking_contacts(contact)
domains = domain_filter(contact)
domains.each do |domain|
registrar = Registrar.find_by(id: domain.registrar_id)
csv << [domain.name, contact.id, contact.name, contact.ident, registrar.name]
end
end
end end
contacts.select! { |c| c.ident_country_code == 'EE' }
magic_with_contacts(contacts)
end end
end end
def checking_contacts(contact) def checking_contacts(contact)
return true unless contact.ident_country_code == 'EE'
c = BusinessRegistryContact.find_by(registry_code: contact.ident) c = BusinessRegistryContact.find_by(registry_code: contact.ident)
return false if c.nil? || c.status == 'N' return false if c.nil? || c.status == 'N'
true true
end end
def magic_with_contacts(contacts)
CSV.open('invalid_business_contacts.csv', 'w') do |csv|
csv << HEADERS
contacts.each do |contact|
domains = domain_filter(contact)
domains.each do |domain|
registrar = Registrar.find_by(id: domain.registrar_id)
csv << [domain.name, contact.id, contact.name, contact.ident, registrar.name]
end
end
end
end
def domain_filter(contact) def domain_filter(contact)
domains = searching_domains(contact) domains = searching_domains(contact)
domains.reject! { |dom| dom.statuses.include? DomainStatus::FORCE_DELETE } domains.reject! { |dom| dom.statuses.include? DomainStatus::FORCE_DELETE }
@ -44,20 +39,8 @@ def searching_domains(contact)
registrant_domains = Domain.where(registrant_id: contact.id) registrant_domains = Domain.where(registrant_id: contact.id)
tech_domains = collect_tech_domains(contact) tech_domains = collect_tech_domains(contact)
admin_domains = collect_admin_domains(contact)
tech_domains | admin_domains | registrant_domains tech_domains | registrant_domains
end
def collect_admin_domains(contact)
admin_domains = []
admin_contacts = AdminDomainContact.where(contact_id: contact.id)
admin_contacts.each do |c|
admin_domains << Domain.find(c.domain_id)
end
admin_domains
end end
def collect_tech_domains(contact) def collect_tech_domains(contact)