defmodule EslHnWeb.API.Controller do @moduledoc """ Controller for serving HN top stories cache """ use EslHnWeb, :controller def index(conn, params) do page = get_page(params["page"]) render(conn, items: EslHn.all(page)) end def show(conn, %{"id" => id}) do with {:ok, id} <- try_int(id), {:ok, story} <- EslHn.story(id) do render(conn, item: story) else _ -> conn |> put_status(:not_found) |> put_view(EslHnWeb.Error.JSON) |> render(:"404", %{}) end end defp get_page(nil), do: 1 defp get_page(input) do String.to_integer(input) end defp try_int(value) do case Integer.parse(value) do {int, ""} -> {:ok, int} _ -> :error end end end