defmodule FirehoseWeb.BlogController do use FirehoseWeb, :controller def index(conn, %{"blog_id" => blog_id} = params) do blog = resolve_blog!(blog_id) page = String.to_integer(params["page"] || "1") result = blog.paginate(page) render(conn, :index, page_title: blog.title(), blog_title: blog.title(), blog_description: blog.description(), posts: result.entries, base_path: blog.base_path(), page: result.page, total_pages: result.total_pages ) end def show(conn, %{"blog_id" => blog_id, "slug" => slug}) do blog = resolve_blog!(blog_id) post = blog.get_post!(slug) render(conn, :show, page_title: post.title, post: post, base_path: blog.base_path() ) end def tag(conn, %{"blog_id" => blog_id, "tag" => tag}) do blog = resolve_blog!(blog_id) posts = blog.posts_by_tag(tag) render(conn, :tag, page_title: "#{blog.title()} — #{tag}", blog_title: blog.title(), tag: tag, posts: posts, base_path: blog.base_path() ) end defp resolve_blog!("engineering"), do: Firehose.EngineeringBlog defp resolve_blog!("releases"), do: Firehose.ReleaseNotes defp resolve_blog!(id) do raise Blogex.NotFoundError, "unknown blog: #{inspect(id)}" end end