From 196c5e14b64065a9969d67888995643ee2dd62a7 Mon Sep 17 00:00:00 2001 From: SomewhatDamaged Date: Mon, 30 Mar 2020 11:51:35 +1100 Subject: [PATCH] API additions for user interactions on single images (#63) * API additions for user interactions on single images * removed ability to render without supplying interactions --- .../controllers/api/json/image/featured_controller.ex | 7 ++++++- .../controllers/api/json/image_controller.ex | 7 ++++++- lib/philomena_web/views/api/json/image_view.ex | 11 ++++++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/philomena_web/controllers/api/json/image/featured_controller.ex b/lib/philomena_web/controllers/api/json/image/featured_controller.ex index a35ff00c..b6a5a0ea 100644 --- a/lib/philomena_web/controllers/api/json/image/featured_controller.ex +++ b/lib/philomena_web/controllers/api/json/image/featured_controller.ex @@ -3,10 +3,13 @@ defmodule PhilomenaWeb.Api.Json.Image.FeaturedController do alias Philomena.ImageFeatures.ImageFeature alias Philomena.Images.Image + alias Philomena.Interactions alias Philomena.Repo import Ecto.Query def show(conn, _params) do + user = conn.assigns.current_user + featured_image = Image |> join(:inner, [i], f in ImageFeature, on: [image_id: i.id]) @@ -22,9 +25,11 @@ defmodule PhilomenaWeb.Api.Json.Image.FeaturedController do |> text("") _ -> + interactions = Interactions.user_interactions([featured_image], user) + conn |> put_view(PhilomenaWeb.Api.Json.ImageView) - |> render("show.json", image: featured_image) + |> render("show.json", image: featured_image, interactions: interactions) end end end diff --git a/lib/philomena_web/controllers/api/json/image_controller.ex b/lib/philomena_web/controllers/api/json/image_controller.ex index df924a11..534f0720 100644 --- a/lib/philomena_web/controllers/api/json/image_controller.ex +++ b/lib/philomena_web/controllers/api/json/image_controller.ex @@ -2,10 +2,13 @@ defmodule PhilomenaWeb.Api.Json.ImageController do use PhilomenaWeb, :controller alias Philomena.Images.Image + alias Philomena.Interactions alias Philomena.Repo import Ecto.Query def show(conn, %{"id" => id}) do + user = conn.assigns.current_user + image = Image |> where(id: ^id) @@ -19,7 +22,9 @@ defmodule PhilomenaWeb.Api.Json.ImageController do |> text("") _ -> - render(conn, "show.json", image: image) + interactions = Interactions.user_interactions([image], user) + + render(conn, "show.json", image: image, interactions: interactions) end end end diff --git a/lib/philomena_web/views/api/json/image_view.ex b/lib/philomena_web/views/api/json/image_view.ex index a3bad216..37ad1605 100644 --- a/lib/philomena_web/views/api/json/image_view.ex +++ b/lib/philomena_web/views/api/json/image_view.ex @@ -10,11 +10,16 @@ defmodule PhilomenaWeb.Api.Json.ImageView do } end - def render("show.json", %{image: image} = assigns) do - %{image: render_one(image, PhilomenaWeb.Api.Json.ImageView, "image.json", assigns)} + def render("show.json", %{image: image, interactions: interactions} = assigns) do + %{ + image: render_one(image, PhilomenaWeb.Api.Json.ImageView, "image.json", assigns), + interactions: interactions + } end - def render("image.json", %{image: %{hidden_from_users: true, duplicate_id: duplicate_id} = image}) + def render("image.json", %{ + image: %{hidden_from_users: true, duplicate_id: duplicate_id} = image + }) when not is_nil(duplicate_id) do %{ id: image.id,