namespace :produce_and_export_ceshi_user do desc "Produce ceshi user and Export to excel" task call: :environment do puts "=======Begin=======" DCODES = %W(1 2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) username = DCODES.sample(8).join email = username + '@forge.com' password = SecureRandom.base64[8..-1] p = Axlsx::Package.new p.workbook.add_worksheet(:name => '测试用户') do |sheet| sheet.add_row ["用户名", "邮箱", "密码", "GiteaToken", "测试仓库", "测试仓库克隆地址"] (1..100).to_a.each do |i| while (User.find_by(login: username).present? || User.find_by(mail: email).present?) do username = DCODES.sample(8).join email = username + '@forge.com' password = SecureRandom.base64[8..-1] end puts "=======Generate:[#{i}] Username: #{username}, Password: #{password}, Email: #{email}=======" puts "=======Create User Begin====== " user = User.new(admin: false, login: username, mail: email, type: "User") user.password = password user.platform = 'forge' user.activate next unless user.valid? 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 puts "=======Create User End====== " code = DCODES.sample(8).join project_params = { user_id: user.id, name: code, repository_name: code, project_category_id: ProjectCategory.pluck(:id).sample, project_language_id: ProjectLanguage.pluck(:id).sample, license_id: License.pluck(:id).sample, ignore_id: Ignore.pluck(:id).sample, private: true } project = Projects::CreateService.new(user, project_params).call puts project.as_json sheet.add_row [username, email, password, user.gitea_token, "#{username}/#{code}", project&.repository.url] end end p.use_shared_strings = true p.serialize('ceshi_user.xlsx') puts "=======END=======" end end