logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: f1d27a5fbbe547a78f835bd65b43a652004d708e
parent: 41b8a76e969e97aef68e7be1f1cdadcb31ea9b1d
Author: Roger Braun <roger@rogerbraun.net>
Date:   Thu,  9 Nov 2017 10:41:19 +0100

Add actor column to activities.

Diffstat:

Mlib/pleroma/activity.ex1+
Mlib/pleroma/web/activity_pub/activity_pub.ex8++++----
Apriv/repo/migrations/20171109091239_add_actor_to_activity.exs24++++++++++++++++++++++++
Mtest/support/factory.ex3++-
Mtest/web/activity_pub/activity_pub_test.exs1+
5 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex @@ -6,6 +6,7 @@ defmodule Pleroma.Activity do schema "activities" do field :data, :map field :local, :boolean, default: true + field :actor, :string has_many :notifications, Notification timestamps() diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do with nil <- Activity.get_by_ap_id(map["id"]), map <- lazy_put_activity_defaults(map), :ok <- insert_full_object(map) do - {:ok, activity} = Repo.insert(%Activity{data: map, local: local}) + {:ok, activity} = Repo.insert(%Activity{data: map, local: local, actor: map["actor"]}) Notification.create_notifications(activity) {:ok, activity} else @@ -137,7 +137,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do defp restrict_actor(query, %{"actor_id" => actor_id}) do from activity in query, - where: fragment("?->>'actor' = ?", activity.data, ^actor_id) + where: activity.actor == ^actor_id end defp restrict_actor(query, _), do: query @@ -168,14 +168,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do defp restrict_blocked(query, %{"blocking_user" => %User{info: info}}) do blocks = info["blocks"] || [] from activity in query, - where: fragment("not (?->>'actor' = ANY(?))", activity.data, ^blocks) + where: fragment("not (? = ANY(?))", activity.actor, ^blocks) end defp restrict_blocked(query, _), do: query def fetch_activities(recipients, opts \\ %{}) do base_query = from activity in Activity, limit: 20, - order_by: [desc: :id] + order_by: [fragment("? desc nulls last", activity.id)] base_query |> restrict_recipients(recipients) diff --git a/priv/repo/migrations/20171109091239_add_actor_to_activity.exs b/priv/repo/migrations/20171109091239_add_actor_to_activity.exs @@ -0,0 +1,24 @@ +defmodule Pleroma.Repo.Migrations.AddActorToActivity do + use Ecto.Migration + + @disable_ddl_transaction true + + def up do + alter table(:activities) do + add :actor, :string + end + + execute """ + update activities set actor = data->>'actor'; + """ + + create index(:activities, [:actor, "id DESC NULLS LAST"], concurrently: true) + end + + def down do + drop index(:activities, [:actor, "id DESC NULLS LAST"]) + alter table(:activities) do + remove :actor + end + end +end diff --git a/test/support/factory.ex b/test/support/factory.ex @@ -51,7 +51,8 @@ defmodule Pleroma.Factory do } %Pleroma.Activity{ - data: data + data: data, + actor: data["actor"] } end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs @@ -52,6 +52,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do test "removes doubled 'to' recipients" do {:ok, activity} = ActivityPub.create(["user1", "user1", "user2"], %User{ap_id: "1"}, "", %{}) assert activity.data["to"] == ["user1", "user2"] + assert activity.actor == "1" end end