53 lines
1.3 KiB
Elixir
53 lines
1.3 KiB
Elixir
defmodule BeetRoundServerWeb.UserJSON do
|
|
alias BeetRoundServer.Accounts.User
|
|
|
|
@doc """
|
|
Renders a list of users.
|
|
"""
|
|
def index(%{users: users}) do
|
|
%{data: for(user <- users, do: data(user))}
|
|
end
|
|
|
|
@doc """
|
|
Renders a single user with token.
|
|
"""
|
|
def show(%{user: user, token: encoded_token}) do
|
|
%{data: %{email: user.email, id: user.id, token: encoded_token}}
|
|
end
|
|
|
|
@doc """
|
|
Renders a single user.
|
|
"""
|
|
def show(%{user: user}) do
|
|
%{data: data(user)}
|
|
end
|
|
|
|
def show(%{changeset: changeset}) do
|
|
# When encoded, the changeset returns its errors
|
|
# as a JSON object. So we just pass it forward.
|
|
%{errors: Ecto.Changeset.traverse_errors(changeset, &translate_error/1)}
|
|
end
|
|
|
|
defp data(%User{} = user) do
|
|
%{
|
|
id: user.id,
|
|
email: user.email
|
|
}
|
|
end
|
|
|
|
defp translate_error({msg, opts}) do
|
|
# You can make use of gettext to translate error messages by
|
|
# uncommenting and adjusting the following code:
|
|
|
|
# if count = opts[:count] do
|
|
# Gettext.dngettext(BeetRoundServerWeb.Gettext, "errors", msg, msg, count, opts)
|
|
# else
|
|
# Gettext.dgettext(BeetRoundServerWeb.Gettext, "errors", msg, opts)
|
|
# end
|
|
|
|
Enum.reduce(opts, msg, fn {key, value}, acc ->
|
|
String.replace(acc, "%{#{key}}", fn _ -> to_string(value) end)
|
|
end)
|
|
end
|
|
end
|