diff --git a/lib/philomena_web/controllers/api/json/post_controller.ex b/lib/philomena_web/controllers/api/json/post_controller.ex new file mode 100644 index 00000000..f2d779bd --- /dev/null +++ b/lib/philomena_web/controllers/api/json/post_controller.ex @@ -0,0 +1,31 @@ +defmodule PhilomenaWeb.Api.Json.PostController do + use PhilomenaWeb, :controller + + alias PhilomenaWeb.PostJson + alias Philomena.Posts.Post + alias Philomena.Repo + import Ecto.Query + + def show(conn, %{"id" => post_id}) do + post = + Post + |> join(:inner, [p], _ in assoc(p, :topic)) + |> join(:inner, [_p, t], _ in assoc(t, :forum)) + |> where(id: ^post_id) + |> where(destroyed_content: false) + |> where([_p, t], t.hidden_from_users == false) + |> where([_p, _t, f], f.access_level == "normal") + |> preload([:user, :topic]) + |> Repo.one() + + cond do + is_nil(post) -> + conn + |> put_status(:not_found) + |> text("") + + true -> + json(conn, %{post: PostJson.as_json(post)}) + end + end +end diff --git a/lib/philomena_web/router.ex b/lib/philomena_web/router.ex index db6ec4ce..d79e1b41 100644 --- a/lib/philomena_web/router.ex +++ b/lib/philomena_web/router.ex @@ -115,12 +115,12 @@ defmodule PhilomenaWeb.Router do resources "/oembed", OembedController, only: [:index] resources "/tags", TagController, only: [:show] resources "/comments", CommentController, only: [:show] + resources "/posts", PostController, only: [:show] resources "/forums", ForumController, only: [:show, :index] do resources "/topics", Forum.TopicController, only: [:show, :index] do resources "/posts", Forum.Topic.PostController, only: [:show, :index] end end - end scope "/", PhilomenaWeb do