firehose/app/lib/firehose_web/controllers/blog_controller.ex
Your Name bc14696f57 Static blog with front page summary
Goal: have a personal blog, and try out another point in the 'modular
app design with elixir' space.

Designing OTP systems with elixir had some interesting ideas.
2026-03-17 11:17:21 +00:00

51 lines
1.3 KiB
Elixir

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