38 lines
1 KiB
Elixir
38 lines
1 KiB
Elixir
defmodule Web.PostController do
|
|
use Web, :controller
|
|
|
|
def show(conn, %{"year" => year, "month" => month, "day" => day, "slug" => slug}) do
|
|
with {year, ""} <- Integer.parse(year),
|
|
{month, ""} <- Integer.parse(month),
|
|
{day, ""} <- Integer.parse(day),
|
|
{:ok, publish_date} <- Date.new(year, month, day) do
|
|
post = Core.Posts.get_published_blog!(publish_date, slug)
|
|
|
|
conn
|
|
|> render_post(post)
|
|
else
|
|
_ -> raise Ecto.NoResultsError
|
|
end
|
|
end
|
|
|
|
def show(conn, %{"status_id" => status_id}) do
|
|
status = Core.Posts.get_published_status!(status_id)
|
|
|
|
conn
|
|
|> render_post(status)
|
|
end
|
|
|
|
def index(%{assigns: %{kind: kind}} = conn, _params) when kind in ~w[blog status]a do
|
|
posts = Core.Posts.get_published_recent_posts(kind)
|
|
|
|
render(conn, :index, posts: posts)
|
|
end
|
|
|
|
defp render_post(conn, %Schema.Post{kind: :blog} = blog) do
|
|
render(conn, :show_blog, blog: blog)
|
|
end
|
|
|
|
defp render_post(conn, %Schema.Post{kind: :status} = status) do
|
|
render(conn, :show_status, status: status)
|
|
end
|
|
end
|