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)
BusinessRegistryContact.delete_all
return p 'File not exist!' unless File.exist?(filename)
return unless File.exist?(filename)
enumurate_csv_file(filename)
end
@ -10,17 +10,12 @@ class ScanCsvRegistryBusinnesContactsJob < ApplicationJob
private
def enumurate_csv_file(filename)
i = 0
CSV.foreach(filename, headers: true, col_sep: ';') do |row|
record = BusinessRegistryContact.create(
BusinessRegistryContact.create(
name: row[0],
registry_code: row[1],
status: row[5]
)
i += 1
p "#{record} is successfully created - #{i} count"
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'
task all_domains: :environment do
# prepare_csv_file
task scan_org: :environment do
contacts = []
Contact.all.each do |contact|
# email = convert_to_unicode(contact.email)
# result = Truemail.validate(email, with: :mx)
Contact.where(ident_type: 'org').each do |contact|
contacts << contact unless checking_contacts(contact)
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
# def find_related_domains(contact)
# registrant_domains = Domain.where(registrant_id: contact.id)
def searching_domains(contact)
registrant_domains = Domain.where(registrant_id: contact.id)
# tech_domains = collect_tech_domains(contact)
# admin_domains = collect_admin_domains(contact)
tech_domains = collect_tech_domains(contact)
admin_domains = collect_admin_domains(contact)
# tech_domains | admin_domains | registrant_domains
# end
tech_domains | admin_domains | registrant_domains
end
# def collect_admin_domains(contact)
# admin_domains = []
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_contacts = AdminDomainContact.where(contact_id: contact.id)
admin_contacts.each do |c|
admin_domains << Domain.find(c.domain_id)
end
# admin_domains
# end
admin_domains
end
# def collect_tech_domains(contact)
# tech_domains = []
def collect_tech_domains(contact)
tech_domains = []
# tech_contacts = TechDomainContact.where(contact_id: contact.id)
# tech_contacts.each do |c|
# tech_domains << Domain.find(c.domain_id)
# end
tech_contacts = TechDomainContact.where(contact_id: contact.id)
tech_contacts.each do |c|
tech_domains << Domain.find(c.domain_id)
end
# tech_domains
# 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
tech_domains
end

View file

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

View file

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