lib/ex_teal/api/card_responder.ex

defmodule ExTeal.Api.CardResponder do
  @moduledoc """
  API Responder that manages cards
  - `GET /dashboard/:name` - Return the dashboard and it's cards
  - `GET /resource/:resource_name/cards` - Return the cards for a resource
  """

  alias ExTeal.Api.ErrorSerializer
  alias ExTeal.Dashboard
  alias ExTeal.Resource.Serializer

  def dashboard(conn, name) do
    case ExTeal.dashboard_for(conn, name) do
      {:ok, dashboard} ->
        dashboard
        |> Dashboard.cards_to_json(conn)
        |> as_json(conn)

      {:error, reason} ->
        ErrorSerializer.handle_error(conn, reason)
    end
  end

  def resource(conn, resource_name) do
    case ExTeal.resource_for(resource_name) do
      {:ok, resource} ->
        resource
        |> Dashboard.cards_to_json(conn)
        |> as_json(conn)

      {:error, reason} ->
        ErrorSerializer.handle_error(conn, reason)
    end
  end

  defp as_json(cards, conn) do
    {:ok, body} = Jason.encode(cards)
    Serializer.as_json(conn, body, 200)
  end
end