Initial commit

This commit is contained in:
Yaser
2026-08-13 19:56:46 +03:30
commit de1d57a67b
474 changed files with 43185 additions and 0 deletions

71
lib/tasks/import.rake Normal file
View 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