defmodule Web.BlogController do use Web, :controller def index(conn, params) do {:ok, {blogs, meta}} = Core.Posts.list_published_posts(:blog, params) 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, meta: meta) 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