defmodule Mix.Tasks.Mobilizon.Users.Delete do @moduledoc """ Task to delete a user """ use Mix.Task alias Mobilizon.Users alias Mobilizon.Users.User @shortdoc "Deletes a Mobilizon user" @impl Mix.Task def run([email | rest]) do {options, [], []} = OptionParser.parse( rest, strict: [ assume_yes: :boolean, keep_email: :boolean ], aliases: [ y: :assume_yes, f: :keep_email ] ) assume_yes? = Keyword.get(options, :assume_yes, false) keep_email? = Keyword.get(options, :keep_email, false) Mix.Task.run("app.start") with {:ok, %User{} = user} <- Users.get_user_by_email(email), true <- assume_yes? or Mix.shell().yes?("Continue with deleting user #{user.email}?"), {:ok, %User{} = user} <- Users.delete_user(user, reserve_email: keep_email?) do Mix.shell().info(""" The user #{user.email} has been deleted """) else {:error, :user_not_found} -> Mix.raise("Error: No such user") _ -> Mix.raise("User has not been deleted.") end end def run(_) do Mix.raise("mobilizon.users.delete requires an email as argument") end end