# frozen_string_literal: true namespace :superadmin do desc "create superadmin" task create: :environment do Kernel.puts "Seeding superadmin" Barong::Seed.new().seeds["superadmin"]&.each do |seed| Kernel.puts "---" raise ConfigError.new("Email missing in users seed") if seed["email"].to_s.empty? raise ConfigError.new("Level is missing for user #{seed["email"]}") unless seed["level"].is_a?(Integer) # Skip existing users if User.find_by(email: seed["email"], state: seed['state']).present? Kernel.puts "User '#{seed['email']}' already exists" next elsif User.find_by(email: seed["email"]).present? User.find_by(email: seed["email"]).update(state: seed['state']) next end user = User.new(seed) user.password ||= SecureRandom.base64(30) if user.save Kernel.puts "Created user for '#{user.email}'" # Set correct level with labels # levels = Level.where(id: 1..user.level) levels = Level.where(id: 1..Level::LEVEL_ID_BOUNDS[user.level.to_s]) raise ConfigError.new("No enough levels found in database to grant the user to level #{user.level}") if levels.count < user.level levels.find_each do |level| user.labels.create(key: level.key, value: level.value, scope: 'private') end else Kernel.puts "Can't create user '#{user.email}': #{user.errors.full_messages.join('; ')}" end end end task delete: :environment do Kernel.puts "deleting superadmin" Barong::Seed.new().seeds["superadmin"]&.each do |seed| user = User.find_by(email: seed['email']) user.update(state: 'inactive') end end end