101 lines
2.3 KiB
Elixir
101 lines
2.3 KiB
Elixir
|
|
defmodule Mse25Web.ItemController do
|
||
|
|
use Mse25Web, :controller
|
||
|
|
alias Mse25.Directus
|
||
|
|
|
||
|
|
def index(conn, _params) do
|
||
|
|
case conn.path_info |> fetch do
|
||
|
|
{:ok, item_type, item_data} ->
|
||
|
|
render(conn, item_type, assigns(item_type, item_data))
|
||
|
|
|
||
|
|
{:not_found, message} ->
|
||
|
|
render(conn, message)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
defp fetch([year, slug], :article) do
|
||
|
|
case Directus.get_article(year <> "/" <> slug) do
|
||
|
|
{:ok, response} -> {:ok, :article, response}
|
||
|
|
_ -> fetch([year, slug], :link)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
defp fetch([year, slug], :link) do
|
||
|
|
case Directus.get_link(year <> "/" <> slug) do
|
||
|
|
{:ok, response} -> {:ok, :link, response}
|
||
|
|
_ -> fetch([year, slug], :event)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
defp fetch([year, slug], :event) do
|
||
|
|
case Directus.get_event(year <> "/" <> slug) do
|
||
|
|
{:ok, response} -> {:ok, :event, response}
|
||
|
|
not_found -> not_found
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
defp fetch([year, slug]) do
|
||
|
|
fetch([year, slug], :article)
|
||
|
|
end
|
||
|
|
|
||
|
|
defp fetch([slug]) do
|
||
|
|
case Directus.get_page(slug) do
|
||
|
|
{:ok, response} -> {:ok, :page, response}
|
||
|
|
not_found -> not_found
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
defp assigns(:article, %{
|
||
|
|
"title" => heading,
|
||
|
|
"contents" => contents,
|
||
|
|
"pubDate" => published_at,
|
||
|
|
"date_updated" => updated_at
|
||
|
|
}) do
|
||
|
|
[
|
||
|
|
heading: heading,
|
||
|
|
contents: Earmark.as_html!(contents),
|
||
|
|
published_at: published_at,
|
||
|
|
updated_at: updated_at
|
||
|
|
]
|
||
|
|
end
|
||
|
|
|
||
|
|
defp assigns(:event, %{
|
||
|
|
"title" => heading,
|
||
|
|
"contents" => contents,
|
||
|
|
"started_at" => published_at
|
||
|
|
}) do
|
||
|
|
[
|
||
|
|
heading: heading,
|
||
|
|
contents: Earmark.as_html!(contents),
|
||
|
|
published_at: published_at
|
||
|
|
]
|
||
|
|
end
|
||
|
|
|
||
|
|
defp assigns(:link, %{
|
||
|
|
"title" => heading,
|
||
|
|
"contents" => contents,
|
||
|
|
"pubDate" => published_at,
|
||
|
|
"source" => url,
|
||
|
|
"h1" => title
|
||
|
|
}) do
|
||
|
|
[
|
||
|
|
heading: heading,
|
||
|
|
contents: Earmark.as_html!(contents),
|
||
|
|
published_at: published_at,
|
||
|
|
url: url,
|
||
|
|
title: title
|
||
|
|
]
|
||
|
|
end
|
||
|
|
|
||
|
|
defp assigns(:page, %{
|
||
|
|
"title" => heading,
|
||
|
|
"contents" => contents,
|
||
|
|
"date_updated" => updated_at
|
||
|
|
}) do
|
||
|
|
[
|
||
|
|
heading: heading,
|
||
|
|
contents: Earmark.as_html!(contents),
|
||
|
|
updated_at: updated_at
|
||
|
|
]
|
||
|
|
end
|
||
|
|
end
|