Revert "Merge branch 'object-creation' into 'develop'"
authorlambda <pleromagit@rogerbraun.net>
Mon, 11 Feb 2019 08:07:39 +0000 (08:07 +0000)
committerlambda <pleromagit@rogerbraun.net>
Mon, 11 Feb 2019 08:07:39 +0000 (08:07 +0000)
This reverts merge request !802

lib/pleroma/object.ex
lib/pleroma/web/activity_pub/utils.ex
lib/pleroma/web/twitter_api/twitter_api.ex
test/object_test.exs

index dabb495364277fdd0299a5e185db8947f26fd8bc..5f1fc801b592d70da0534fdb9defd34e99880758 100644 (file)
@@ -20,29 +20,9 @@ defmodule Pleroma.Object do
     timestamps()
   end
 
-  def insert_or_get(cng) do
-    {_, data} = fetch_field(cng, :data)
-    id = data["id"] || data[:id]
-    key = "object:#{id}"
-
-    fetcher = fn _ ->
-      with nil <- get_by_ap_id(id),
-           {:ok, object} <- Repo.insert(cng) do
-        {:commit, object}
-      else
-        %Object{} = object -> {:commit, object}
-        e -> {:ignore, e}
-      end
-    end
-
-    with {state, object} when state in [:commit, :ok] <- Cachex.fetch(:object_cache, key, fetcher) do
-      {:ok, object}
-    end
-  end
-
   def create(data) do
     Object.change(%Object{}, %{data: data})
-    |> insert_or_get()
+    |> Repo.insert()
   end
 
   def change(struct, params \\ %{}) do
index da6cca4ddd4052b93013b8c0c3b30a4fd88002b0..964e11c9d424caae12a43dff5e6c2d46157ad06c 100644 (file)
@@ -142,8 +142,14 @@ defmodule Pleroma.Web.ActivityPub.Utils do
     context = context || generate_id("contexts")
     changeset = Object.context_mapping(context)
 
-    with {:ok, object} <- Object.insert_or_get(changeset) do
-      object
+    case Repo.insert(changeset) do
+      {:ok, object} ->
+        object
+
+      # This should be solved by an upsert, but it seems ecto
+      # has problems accessing the constraint inside the jsonb.
+      {:error, _} ->
+        Object.get_cached_by_ap_id(context)
     end
   end
 
index 162beb9be06b7ffb7f95b51efb434ed3d5d1871a..db521a3ad09599568d52dc597c2b1e469e8dc6e4 100644 (file)
@@ -310,8 +310,16 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
     else
       _e ->
         changeset = Object.context_mapping(context)
-        {:ok, object} = Object.insert_or_get(changeset)
-        object.id
+
+        case Repo.insert(changeset) do
+          {:ok, %{id: id}} ->
+            id
+
+          # This should be solved by an upsert, but it seems ecto
+          # has problems accessing the constraint inside the jsonb.
+          {:error, _} ->
+            Object.get_cached_by_ap_id(context).id
+        end
     end
   end
 
index ab643101253fda533f61150aea58f1c222dbd6f4..72194975d7b25405bae21fedb1c7d9e93d0dedda 100644 (file)
@@ -57,32 +57,4 @@ defmodule Pleroma.ObjectTest do
       assert cached_object.data["type"] == "Tombstone"
     end
   end
-
-  describe "insert_or_get" do
-    test "inserting the same object twice (by id) just returns the original object" do
-      data = %{data: %{"id" => Ecto.UUID.generate()}}
-      cng = Object.change(%Object{}, data)
-      {:ok, object} = Object.insert_or_get(cng)
-      {:ok, second_object} = Object.insert_or_get(cng)
-
-      Cachex.clear(:object_cache)
-      {:ok, third_object} = Object.insert_or_get(cng)
-
-      assert object == second_object
-      assert object == third_object
-    end
-  end
-
-  describe "create" do
-    test "inserts an object for a given data set" do
-      data = %{"id" => Ecto.UUID.generate()}
-
-      {:ok, object} = Object.create(data)
-      assert object.data["id"] == data["id"]
-
-      # Works when doing it twice.
-      {:ok, object} = Object.create(data)
-      assert object.data["id"] == data["id"]
-    end
-  end
 end