Current section

Files

Jump to
imagine_cms lib imagine accounts.ex
Raw

lib/imagine/accounts.ex

defmodule Imagine.Accounts do
@moduledoc """
The Accounts context.
"""
import Ecto.Query, warn: false
alias Imagine.Repo
alias Imagine.Accounts.User
@doc """
Returns the list of users.
## Examples
iex> list_users()
[%User{}, ...]
"""
def list_users do
Repo.all(User |> order_by(:username))
end
@doc """
Gets a single user.
Raises `Ecto.NoResultsError` if the User does not exist.
## Examples
iex> get_user!(123)
%User{}
iex> get_user!(456)
** (Ecto.NoResultsError)
"""
def get_user!(id), do: Repo.get!(User, id)
def get_user(id), do: Repo.get(User, id)
def get_user_by_username_or_email(username_or_email) do
Repo.get_by(User, username: username_or_email) ||
Repo.get_by(User, email: username_or_email)
end
@doc """
Creates a user.
## Examples
iex> create_user(%{field: value})
{:ok, %User{}}
iex> create_user(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_user(attrs) do
%User{}
|> User.changeset(attrs)
|> Repo.insert()
end
@doc """
Updates a user.
## Examples
iex> update_user(user, %{field: new_value})
{:ok, %User{}}
iex> update_user(user, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def update_user(%User{} = user, attrs) do
user
|> User.changeset(attrs)
|> Repo.update()
end
def update_user_change_password(%User{} = user, attrs) do
user
|> User.change_password_changeset(attrs)
|> Repo.update()
end
@doc false
def update_user_set_is_superuser(%User{} = user, val) do
user
|> User.is_superuser_changeset(%{is_superuser: val})
|> Repo.update()
end
@doc """
Deletes a User.
## Examples
iex> delete_user(user)
{:ok, %User{}}
iex> delete_user(user)
{:error, %Ecto.Changeset{}}
"""
def delete_user(%User{} = user) do
Repo.delete(user)
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking user changes.
## Examples
iex> change_user(user)
%Ecto.Changeset{source: %User{}}
"""
def change_user(%User{} = user) do
User.changeset(user, %{})
end
end