implement scan valid org contacts

This commit is contained in:
Oleg Hasjanov 2021-06-17 14:38:49 +03:00
parent 7c8c9120b5
commit 8837252a46
4 changed files with 56 additions and 73 deletions

View file

@ -2,7 +2,7 @@ class ScanCsvRegistryBusinnesContactsJob < ApplicationJob
def perform(filename) def perform(filename)
BusinessRegistryContact.delete_all BusinessRegistryContact.delete_all
return p 'File not exist!' unless File.exist?(filename) return unless File.exist?(filename)
enumurate_csv_file(filename) enumurate_csv_file(filename)
end end
@ -10,17 +10,12 @@ class ScanCsvRegistryBusinnesContactsJob < ApplicationJob
private private
def enumurate_csv_file(filename) def enumurate_csv_file(filename)
i = 0
CSV.foreach(filename, headers: true, col_sep: ';') do |row| CSV.foreach(filename, headers: true, col_sep: ';') do |row|
record = BusinessRegistryContact.create( BusinessRegistryContact.create(
name: row[0], name: row[0],
registry_code: row[1], registry_code: row[1],
status: row[5] status: row[5]
) )
i += 1
p "#{record} is successfully created - #{i} count"
end end
end end
end end

View file

@ -1,78 +1,66 @@
namespace :collect_invalid_contacts do HEADERS = %w[domain id name code registrar].freeze
namespace :contacts do
desc 'Starts collect invalid validation contacts' desc 'Starts collect invalid validation contacts'
task all_domains: :environment do task scan_org: :environment do
# prepare_csv_file contacts = []
Contact.all.each do |contact| Contact.where(ident_type: 'org').each do |contact|
# email = convert_to_unicode(contact.email) contacts << contact unless checking_contacts(contact)
# result = Truemail.validate(email, with: :mx) end
# collect_data_for_csv(contact, result.result) unless result.result.success magic_with_contacts(contacts)
end
end
def checking_contacts(contact)
c = BusinessRegistryContact.find_by(registry_code: contact.ident)
return false if c.nil? || c.status == 'N'
true
end
def magic_with_contacts(contacts)
CSV.open('invalid_business_contacts.csv', 'w') do |csv|
csv << HEADERS
contacts.each do |contact|
domains = searching_domains(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 end
end end
# def find_related_domains(contact) 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) admin_domains = collect_admin_domains(contact)
# tech_domains | admin_domains | registrant_domains tech_domains | admin_domains | registrant_domains
# end end
# def collect_admin_domains(contact) def collect_admin_domains(contact)
# admin_domains = [] admin_domains = []
# admin_contacts = AdminDomainContact.where(contact_id: contact.id) admin_contacts = AdminDomainContact.where(contact_id: contact.id)
# admin_contacts.each do |c| admin_contacts.each do |c|
# admin_domains << Domain.find(c.domain_id) admin_domains << Domain.find(c.domain_id)
# end end
# admin_domains admin_domains
# end end
# def collect_tech_domains(contact) def collect_tech_domains(contact)
# tech_domains = [] tech_domains = []
# tech_contacts = TechDomainContact.where(contact_id: contact.id) tech_contacts = TechDomainContact.where(contact_id: contact.id)
# tech_contacts.each do |c| tech_contacts.each do |c|
# tech_domains << Domain.find(c.domain_id) tech_domains << Domain.find(c.domain_id)
# end end
# tech_domains tech_domains
# end end
# def collect_data_for_csv(contact, result)
# domains = find_related_domains(contact)
# domains.reject! { |dom| dom.statuses.include? DomainStatus::FORCE_DELETE }
# CSV.open('invalid_emails.csv', 'a') do |csv|
# domains.each do |domain|
# attrs = []
# attrs.push(domain.name, contact.email, result.errors)
# csv << attrs
# end
# end
# end
# def prepare_csv_file
# headers = %w[
# contact
# domain
# error
# ]
# csv = CSV.open('invalid_emails.csv', 'w')
# csv << headers
# end
# def convert_to_unicode(email)
# original_domain = Mail::Address.new(email).domain
# decoded_domain = SimpleIDN.to_unicode(original_domain)
# original_local = Mail::Address.new(email).local
# decoded_local = SimpleIDN.to_unicode(original_local)
# "#{decoded_local}@#{decoded_domain}"
# end

View file

@ -1,5 +1,5 @@
namespace :collect_invalid_contacts do namespace :collect_invalid_contacts do
desc 'Starts collect invalid validation contacts' desc 'Starts collect invalid business contacts'
task all_domains: :environment do task all_domains: :environment do
prepare_csv_file prepare_csv_file

View file

@ -1,8 +1,8 @@
FILE_NAME = './ettevotja_rekvisiidid_init.csv'.freeze
namespace :collect_csv_data do namespace :collect_csv_data do
desc 'Import from csv registry business contact into BusinessRegistryContact model' desc 'Import from csv registry business contact into BusinessRegistryContact model'
FILE_NAME = './ettevotja_rekvisiidid_init.csv'.freeze
task business_contacts: :environment do task business_contacts: :environment do
ScanCsvRegistryBusinnesContactsJob.perform_later(FILE_NAME) ScanCsvRegistryBusinnesContactsJob.perform_later(FILE_NAME)
end end