this repo has no description
1defmodule EslHnWeb.API.Controller do
2 @moduledoc """
3 Controller for serving HN top stories cache
4 """
5
6 use EslHnWeb, :controller
7
8 def index(conn, params) do
9 page = get_page(params["page"])
10
11 render(conn, items: EslHn.all(page))
12 end
13
14 def show(conn, %{"id" => id}) do
15 with {:ok, id} <- try_int(id),
16 {:ok, story} <- EslHn.story(id) do
17 render(conn, item: story)
18 else
19 _ ->
20 conn
21 |> put_status(:not_found)
22 |> put_view(EslHnWeb.Error.JSON)
23 |> render(:"404", %{})
24 end
25 end
26
27 defp get_page(nil), do: 1
28
29 defp get_page(input) do
30 String.to_integer(input)
31 end
32
33 defp try_int(value) do
34 case Integer.parse(value) do
35 {int, ""} -> {:ok, int}
36 _ -> :error
37 end
38 end
39end