defmodule MicrowavepropWeb.Api.V1.TokenJSON do @moduledoc "Renders user API token responses." alias Microwaveprop.Accounts.UserApiToken @doc "Token list view (no plaintext — never recoverable after creation)." @spec index(map()) :: map() def index(%{tokens: tokens}) do %{data: Enum.map(tokens, &data/1)} end @doc "Single token without plaintext." @spec show(map()) :: map() def show(%{token: token}), do: %{data: data(token)} @doc "Single token including the one-time plaintext value at the top level." @spec show_with_plaintext(UserApiToken.t(), String.t()) :: map() def show_with_plaintext(%UserApiToken{} = token, plaintext) do %{data: data(token), token: plaintext} end defp data(%UserApiToken{} = t) do %{ id: t.id, name: t.name, inserted_at: t.inserted_at, last_used_at: t.last_used_at, expires_at: t.expires_at, revoked_at: t.revoked_at } end end