add delete user function

This commit is contained in:
shibao 2021-09-10 21:37:17 -04:00 committed by oliviasculley
parent d424a6631a
commit 8e4e3872f5
4 changed files with 32 additions and 8 deletions

View File

@ -244,6 +244,11 @@ defmodule Cannery.Accounts do
end end
end end
@spec delete_user!(User.t()) :: User.t()
def delete_user!(%User{} = user) do
user |> Repo.delete!()
end
## Session ## Session
@doc """ @doc """

View File

@ -64,6 +64,20 @@ defmodule CanneryWeb.UserSettingsController do
end end
end end
def delete(conn, %{"id" => user_id}) do
if user_id == conn.assigns.current_user.id do
Accounts.delete_user!(conn.assigns.current_user)
conn
|> put_flash(:error, "Your account has been deleted")
|> redirect(to: Routes.home_path(conn, :index))
else
conn
|> put_flash(:error, "Unable to delete user")
|> redirect(to: Routes.user_settings_path(conn, :edit))
end
end
defp assign_email_and_password_changesets(conn, _opts) do defp assign_email_and_password_changesets(conn, _opts) do
user = conn.assigns.current_user user = conn.assigns.current_user

View File

@ -47,6 +47,7 @@ defmodule CanneryWeb.Router do
get "/users/settings", UserSettingsController, :edit get "/users/settings", UserSettingsController, :edit
put "/users/settings", UserSettingsController, :update put "/users/settings", UserSettingsController, :update
delete "/users/settings/:id", UserSettingsController, :delete
get "/users/settings/confirm_email/:token", UserSettingsController, :confirm_email get "/users/settings/confirm_email/:token", UserSettingsController, :confirm_email
live "/tags", TagLive.Index, :index live "/tags", TagLive.Index, :index

View File

@ -1,4 +1,4 @@
<div class="flex flex-col justify-center items-center space-y-4"> <div class="mb-8 flex flex-col justify-center items-center space-y-8">
<h1 class="title text-primary-500 text-xl"> <h1 class="title text-primary-500 text-xl">
Settings Settings
</h1> </h1>
@ -82,4 +82,8 @@
<%= submit "Change password", class: "btn btn-primary" %> <%= submit "Change password", class: "btn btn-primary" %>
<% end %> <% end %>
<%= link "Delete User", to: Routes.user_settings_path(@conn, :delete, @current_user),
method: :delete, class: "btn btn-alert",
data: [confirm: "Are you sure you want to delete your account?"] %>
</div> </div>