defmodule Mix.Tasks.Aprsme.UserRole do @shortdoc "Promotes or demotes an existing user" @moduledoc """ Sets an existing user's role by email. mix aprsme.user_role user@example.com admin mix aprsme.user_role user@example.com user """ use Mix.Task @impl Mix.Task def run([email, role_name]) when role_name in ["user", "admin"] do _ = Application.ensure_all_started(:aprsme) case Aprsme.Accounts.get_user_by_email(email) do nil -> IO.puts(:stderr, "Error: No user found with email #{email}") System.halt(1) user -> role = String.to_existing_atom(role_name) case Aprsme.Accounts.set_user_role(user, role) do {:ok, _user} -> IO.puts("Set #{email} role to #{role_name}") {:error, changeset} -> IO.puts(:stderr, "Error: Could not update role: #{inspect(changeset.errors)}") System.halt(1) end end end def run(_args) do IO.puts(:stderr, "Usage: mix aprsme.user_role EMAIL user|admin") System.halt(1) end end