29 lines
857 B
Elixir
29 lines
857 B
Elixir
defmodule Web.BlogController do
|
|
use Web, :controller
|
|
|
|
def index(conn, _params) do
|
|
blogs = Core.Posts.get_published_recent_posts(:blog)
|
|
|
|
blogs_by_year =
|
|
blogs
|
|
|> Enum.group_by(fn blog ->
|
|
date = Core.Posts.publish_date(blog)
|
|
date && date.year
|
|
end)
|
|
|> Enum.sort_by(fn {year, _} -> year end, :desc)
|
|
|
|
render(conn, :index, blogs_by_year: blogs_by_year)
|
|
end
|
|
|
|
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
|
|
blog = Core.Posts.get_published_blog!(publish_date, slug)
|
|
render(conn, :show, blog: blog)
|
|
else
|
|
_ -> raise Ecto.NoResultsError
|
|
end
|
|
end
|
|
end
|