@@ -1,9 +1,16 @@ | |||||
defmodule Pleroma.Object do | defmodule Pleroma.Object do | ||||
use Ecto.Schema | use Ecto.Schema | ||||
alias Pleroma.{Repo, Object} | |||||
import Ecto.Query | |||||
schema "objects" do | schema "objects" do | ||||
field :data, :map | field :data, :map | ||||
timestamps() | timestamps() | ||||
end | end | ||||
def get_by_ap_id(ap_id) do | |||||
Repo.one(from object in Object, | |||||
where: fragment("? @> ?", object.data, ^%{id: ap_id})) | |||||
end | |||||
end | end |
@@ -8,6 +8,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||||
map = if map["object"] do | map = if map["object"] do | ||||
object = Map.put_new_lazy(map["object"], "id", &generate_object_id/0) | object = Map.put_new_lazy(map["object"], "id", &generate_object_id/0) | ||||
Repo.insert!(%Object{data: object}) | |||||
Map.put(map, "object", object) | Map.put(map, "object", object) | ||||
else | else | ||||
map | map | ||||
@@ -25,7 +25,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do | |||||
assert activity.data["id"] == given_id | assert activity.data["id"] == given_id | ||||
end | 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 = %{ | data = %{ | ||||
"object" => %{ | "object" => %{ | ||||
"ok" => true | "ok" => true | ||||
@@ -34,6 +34,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do | |||||
{:ok, %Activity{} = activity} = ActivityPub.insert(data) | {:ok, %Activity{} = activity} = ActivityPub.insert(data) | ||||
assert is_binary(activity.data["object"]["id"]) | assert is_binary(activity.data["object"]["id"]) | ||||
assert %Object{} = Object.get_by_ap_id(activity.data["object"]["id"]) | |||||
end | end | ||||
end | end | ||||