[#394] Refactoring (using Ecto.Multi; "untag" route change).
authorIvan Tashkinov <ivantashkinov@gmail.com>
Fri, 7 Dec 2018 08:04:39 +0000 (11:04 +0300)
committerIvan Tashkinov <ivantashkinov@gmail.com>
Fri, 7 Dec 2018 08:04:39 +0000 (11:04 +0300)
lib/pleroma/user.ex
lib/pleroma/web/router.ex
test/web/admin_api/admin_api_controller_test.exs

index 3984e610ecb88eaf1ae0ed6c55df6265313a502f..511e6956e23153dc504417582a54a8bda6aa3349 100644 (file)
@@ -2,6 +2,7 @@ defmodule Pleroma.User do
   use Ecto.Schema
 
   import Ecto.{Changeset, Query}
+  alias Ecto.Multi
   alias Pleroma.{Repo, User, Object, Web, Activity, Notification}
   alias Comeonin.Pbkdf2
   alias Pleroma.Formatter
@@ -844,18 +845,13 @@ defmodule Pleroma.User do
       |> List.flatten()
       |> Enum.map(&String.downcase(&1))
 
-    Repo.transaction(fn ->
-      for user <- users do
+    multi =
+      Enum.reduce(users, Multi.new(), fn user, multi ->
         new_tags = mutate_tags(user, tags, action)
+        Multi.update(multi, {:user, user.id}, change(user, %{tags: new_tags}))
+      end)
 
-        {:ok, updated_user} =
-          user
-          |> change(%{tags: new_tags})
-          |> Repo.update()
-
-        updated_user
-      end
-    end)
+    Repo.transaction(multi)
   end
 
   defp mutate_tags(user, tags, :tag), do: Enum.uniq(user.tags ++ tags)
index ae942701eea205110f54791db2267f2d8fb75b2b..a076073665d765aaa67c48751c254b244489ddef 100644 (file)
@@ -99,7 +99,7 @@ defmodule Pleroma.Web.Router do
     delete("/user", AdminAPIController, :user_delete)
     post("/user", AdminAPIController, :user_create)
     put("/users/tag", AdminAPIController, :tag_users)
-    put("/users/untag", AdminAPIController, :untag_users)
+    delete("/users/tag", AdminAPIController, :untag_users)
 
     get("/permission_group/:nickname", AdminAPIController, :right_get)
     get("/permission_group/:nickname/:permission_group", AdminAPIController, :right_get)
index 55aa7418ba894dd5660e18a26f5236e5c70ba264..ba3b77fb6f28e683da84a20f0e43d6aa4a7c934c 100644 (file)
@@ -37,7 +37,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
     end
   end
 
-  describe "/api/pleroma/admin//users/tag" do
+  describe "PUT /api/pleroma/admin/users/tag" do
     setup do
       admin = insert(:user, info: %{is_admin: true})
       user1 = insert(:user, %{tags: ["x"]})
@@ -73,7 +73,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
     end
   end
 
-  describe "/api/pleroma/admin//users/untag" do
+  describe "DELETE /api/pleroma/admin/users/tag" do
     setup do
       admin = insert(:user, info: %{is_admin: true})
       user1 = insert(:user, %{tags: ["x"]})
@@ -84,8 +84,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
         build_conn()
         |> assign(:user, admin)
         |> put_req_header("accept", "application/json")
-        |> put(
-          "/api/pleroma/admin/users/untag?nicknames[]=#{user1.nickname}&nicknames[]=#{
+        |> delete(
+          "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=#{
             user2.nickname
           }&tags[]=x&tags[]=z"
         )