aprs.me/lib/mix/tasks/aprsme.user_role.ex
Graham McIntire a9827f245e
Some checks failed
Elixir CI / Build and test (push) Successful in 1m33s
Elixir CI / Dialyzer (push) Has been cancelled
Elixir CI / Build and Push Docker Image (push) Has been cancelled
fix: resolve all dialyzer warnings — unmatched returns, pattern mismatches, and Mix.Task PLT entries
2026-07-27 14:18:42 -05:00

39 lines
1 KiB
Elixir

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