# 执行示例 bundle exec rake "sync_mindspore:contributor_to_user" # RAILS_ENV=production bundle exec rake "sync_mindspore:contributor_to_user" desc "mindspore项目贡献者数据" # 同步mindspre贡献者数据至用户表 namespace :sync_mindspore do desc "同步用户信息" task contributor_to_user: :environment do i = 1 fail_users = [] file = File.open('public/mindspore_authors', 'r') file.each_line do |l| itemArray = l.gsub("\r\n", "").split("|:|") email = itemArray[0] username = itemArray[1] password = '12345678' puts "=======Generate:[#{i}] Username: #{username}, Password: #{password}, Email: #{email}=======" puts "=======Create User Begin====== " user = User.new(admin: false, login: username, mail: email, type: "User", is_test: 1) user.password = password user.platform = 'forge' user.activate unless user.valid? puts "=======Create User Fail!====== " fail_users << [username, email] next end interactor = Gitea::RegisterInteractor.call({username: username, email: email, password: password}) if interactor.success? gitea_user = interactor.result result = Gitea::User::GenerateTokenService.call(username, password) user.gitea_token = result['sha1'] user.gitea_uid = gitea_user[:body]['id'] if user.save! UserExtension.create!(user_id: user.id) end end i += 1 puts "=======Create User End====== " end puts "=======Fail Users:#{fail_users}====== " file.close end # 执行示例 bundle exec rake "sync_mindspore:init_project_blockchain[1,2]" # RAILS_ENV=production bundle exec rake "sync_mindspore:init_project_blockchain[1,2]" desc "初始化区块链项目" task :init_project_blockchain, [:id, :init_id] => :environment do |t, args| puts "=====Init Project Blockchain: #{args.id}=====" project = Project.find_by_id(args.id) project.update_column(:use_blockchain, true) username = project.user_id.to_s token_name = project.id.to_s total_supply = 10000 token_balance = [[init_id.to_s, 100]] contributions = Project.mindspore_contributors total_contributions = contributions.sum{|i| i["contributions"]} contributions.each do |con| cont_balance = Float(con["contributions"]*9900/total_contributions).round(0) token_balance << [con["id"].to_s, cont_balance] if cont_balance > 0 end params = { "request-type": "create repo", "username": username, "token_name": token_name, "total_supply": total_supply, "token_balance": token_balance }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) end end