From f2c1dbab0b61358b4607ebd0dfa02f92d0dace9d Mon Sep 17 00:00:00 2001 From: "byte[]" Date: Mon, 7 Sep 2020 23:47:19 -0400 Subject: [PATCH] correctly return error on gallery unique constraint --- lib/philomena/galleries.ex | 21 ++++++++++++ lib/philomena/galleries/interaction.ex | 1 + .../controllers/gallery/image_controller.ex | 34 +++++++++---------- 3 files changed, 39 insertions(+), 17 deletions(-) diff --git a/lib/philomena/galleries.ex b/lib/philomena/galleries.ex index 70fd3a46..f70c7505 100644 --- a/lib/philomena/galleries.ex +++ b/lib/philomena/galleries.ex @@ -169,6 +169,17 @@ defmodule Philomena.Galleries do {:ok, count} end) |> Repo.transaction() + |> case do + {:ok, result} -> + Images.reindex_image(image) + notify_gallery(gallery) + reindex_gallery(gallery) + + {:ok, result} + + error -> + error + end end def remove_image_from_gallery(gallery, image) do @@ -201,6 +212,16 @@ defmodule Philomena.Galleries do {:ok, count} end) |> Repo.transaction() + |> case do + {:ok, result} -> + Images.reindex_image(image) + reindex_gallery(gallery) + + {:ok, result} + + error -> + error + end end defp last_position(gallery_id) do diff --git a/lib/philomena/galleries/interaction.ex b/lib/philomena/galleries/interaction.ex index 7a0f7227..a55f6660 100644 --- a/lib/philomena/galleries/interaction.ex +++ b/lib/philomena/galleries/interaction.ex @@ -19,6 +19,7 @@ defmodule Philomena.Galleries.Interaction do |> cast(attrs, [:image_id, :position]) |> validate_required([:image_id, :position]) |> foreign_key_constraint(:image_id, name: :fk_rails_bb5ebe2a77) + |> unique_constraint(:image_id, name: :index_gallery_interactions_on_gallery_id_and_image_id) |> case do %{valid?: false, changes: changes} = changeset when changes == %{} -> %{changeset | action: :ignore} diff --git a/lib/philomena_web/controllers/gallery/image_controller.ex b/lib/philomena_web/controllers/gallery/image_controller.ex index 0baeb4d0..33569725 100644 --- a/lib/philomena_web/controllers/gallery/image_controller.ex +++ b/lib/philomena_web/controllers/gallery/image_controller.ex @@ -1,10 +1,9 @@ defmodule PhilomenaWeb.Gallery.ImageController do use PhilomenaWeb, :controller - alias Philomena.Images.Image alias Philomena.Galleries.Gallery - alias Philomena.Images alias Philomena.Galleries + alias Philomena.Images.Image plug PhilomenaWeb.FilterBannedUsersPlug @@ -15,25 +14,26 @@ defmodule PhilomenaWeb.Gallery.ImageController do plug :load_and_authorize_resource, model: Image, id_name: "image_id", persisted: true def create(conn, _params) do - gallery = conn.assigns.gallery - image = conn.assigns.image + case Galleries.add_image_to_gallery(conn.assigns.gallery, conn.assigns.image) do + {:ok, _gallery} -> + json(conn, %{}) - {:ok, _gallery} = Galleries.add_image_to_gallery(gallery, image) - Galleries.notify_gallery(gallery) - Galleries.reindex_gallery(gallery) - Images.reindex_image(image) - - json(conn, %{}) + _error -> + conn + |> put_status(:bad_request) + |> json(%{}) + end end def delete(conn, _params) do - gallery = conn.assigns.gallery - image = conn.assigns.image + case Galleries.remove_image_from_gallery(conn.assigns.gallery, conn.assigns.image) do + {:ok, _gallery} -> + json(conn, %{}) - {:ok, _gallery} = Galleries.remove_image_from_gallery(gallery, image) - Galleries.reindex_gallery(gallery) - Images.reindex_image(image) - - json(conn, %{}) + _error -> + conn + |> put_status(:bad_request) + |> json(%{}) + end end end