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 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 def mail_status(%{status: status}) do %{data: status} 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