Files

58 lines
1.1 KiB
Elixir

defmodule Localiser.Domain.Users do
alias Localiser.Repo
alias Localiser.Domain.Schema.User
def list_users, do: Repo.all(User)
def get_user!(id), do: Repo.get!(User, id)
def get_user(id) do
case Repo.get(User, id) do
nil -> {:error, :not_found}
user -> {:ok, user}
end
end
def any?, do: Repo.exists?(User)
def get_user_by_username(username) do
Repo.get_by(User, username: username)
end
def create_user(attrs) do
%User{}
|> User.changeset(attrs)
|> Repo.insert()
end
def update_user(%User{} = user, attrs) do
user
|> User.changeset(attrs)
|> Repo.update()
end
def promote_to_admin(%User{} = user) do
user
|> Ecto.Changeset.change(is_admin: true)
|> Repo.update()
end
def delete_user(%User{} = user), do: Repo.delete(user)
def authenticate_user(username, password) do
user = get_user_by_username(username)
cond do
user && Argon2.verify_pass(password, user.password_hash) ->
{:ok, user}
user ->
{:error, :invalid_credentials}
true ->
Argon2.no_user_verify()
{:error, :invalid_credentials}
end
end
end