Initial commit
This commit is contained in:
71
lib/tasks/import.rake
Normal file
71
lib/tasks/import.rake
Normal file
@@ -0,0 +1,71 @@
|
||||
|
||||
#frozen_string_literal: true
|
||||
|
||||
require 'csv'
|
||||
|
||||
namespace :import do
|
||||
# Detailed instruction https://github.com/rubykube/barong/blob/master/docs/tasks/import.md
|
||||
# Required fields for import users:
|
||||
# - uid
|
||||
# - email
|
||||
#
|
||||
# Usage:
|
||||
# For import users: -> bundle exec rake import:users['file_name.csv']
|
||||
|
||||
desc 'Load users from csv file.'
|
||||
task :users, [:config_load_path] => [:environment] do |_, args|
|
||||
csv_table = File.read(Rails.root.join(args[:config_load_path]))
|
||||
import_user_log = File.open('./log/import_users.log', 'w')
|
||||
count = 0
|
||||
CSV.parse(csv_table, :headers => true).map do |row|
|
||||
row = row.to_h.compact.symbolize_keys!
|
||||
defaults = { level: 0, role: 'member', state: 'pending', password: generate_password }
|
||||
permitted_attr = %i[uid email role state]
|
||||
User.new(row.slice(*permitted_attr)
|
||||
.reverse_merge(defaults))
|
||||
.save!
|
||||
count += 1
|
||||
rescue StandardError => e
|
||||
message = { error: e.message, email: row[:email], uid: row[:uid] }
|
||||
import_user_log.write(message.to_yaml + "\n")
|
||||
end
|
||||
import_user_log.close
|
||||
Kernel.puts "Created #{count} members"
|
||||
Kernel.puts "Errored #{CSV.parse(csv_table, headers: true).count - count}"
|
||||
end
|
||||
|
||||
# Required fields for import referrals:
|
||||
# - uid
|
||||
# - referral_uid
|
||||
#
|
||||
# Usage:
|
||||
# For import users: -> bundle exec rake import:fill_referals['file_name.csv']
|
||||
|
||||
desc 'users referral relation from csv file'
|
||||
task :fill_referrals, [:config_load_path] => [:environment] do |_, args|
|
||||
csv_table = File.read(Rails.root.join(args[:config_load_path]))
|
||||
import_affiliates_log = File.open('./log/import_referrals.log', 'w')
|
||||
count = 0
|
||||
CSV.parse(csv_table, :headers => true).map do |row|
|
||||
row = row.to_h.compact.symbolize_keys!
|
||||
user = User.find_by_uid!(row[:uid])
|
||||
target_user = User.find_by_uid(row[:referral_uid])
|
||||
next unless target_user
|
||||
|
||||
user.update!(referral_id: target_user.id)
|
||||
count += 1
|
||||
rescue StandardError => e
|
||||
message = { error: e.message, email: row[:email], uid: row[:uid], referral_uid: row[:referral_uid] }
|
||||
import_affiliates_log.write(message.to_yaml + "\n")
|
||||
end
|
||||
import_affiliates_log.close
|
||||
Kernel.puts "Created #{count} referrals"
|
||||
end
|
||||
|
||||
def generate_password
|
||||
chars = ('a'..'z').to_a
|
||||
numbers = ('0'..'9').to_a
|
||||
special = %w[! @ # $ % & / ( ) + ? *]
|
||||
chars.sort_by { rand }.join[0..3] + chars.sort_by { rand }.join[0..3].upcase + numbers.sort_by { rand }.join[0..3] + special.sort_by { rand }.join[0..3]
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user