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