diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index a31f40d07..f932034d7 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -1,9 +1,16 @@ defmodule Pleroma.Object do use Ecto.Schema + alias Pleroma.{Repo, Object} + import Ecto.Query schema "objects" do field :data, :map timestamps() end + + def get_by_ap_id(ap_id) do + Repo.one(from object in Object, + where: fragment("? @> ?", object.data, ^%{id: ap_id})) + end end diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 6c8250de8..b01def693 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do map = if map["object"] do object = Map.put_new_lazy(map["object"], "id", &generate_object_id/0) + Repo.insert!(%Object{data: object}) Map.put(map, "object", object) else map diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 0e778d887..2c6f67621 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -25,7 +25,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do assert activity.data["id"] == given_id end - test "adds an id to a given object if it lacks one" do + test "adds an id to a given object if it lacks one and inserts it to the object database" do data = %{ "object" => %{ "ok" => true @@ -34,6 +34,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do {:ok, %Activity{} = activity} = ActivityPub.insert(data) assert is_binary(activity.data["object"]["id"]) + assert %Object{} = Object.get_by_ap_id(activity.data["object"]["id"]) end end