diff options
author | Wim Vanderbauwhede <wim.vanderbauwhede@mail.be> | 2019-02-14 16:41:40 +0000 |
---|---|---|
committer | Wim Vanderbauwhede <wim.vanderbauwhede@mail.be> | 2019-02-14 16:41:40 +0000 |
commit | 04b1c135543965860029557fc216eb38fd63b6c7 (patch) | |
tree | c1fb60376eeb35539704c23d282af7777895d4ea /priv/repo/migrations/20190109152453_add_visibility_function.exs | |
parent | bf5b1c7f06c9f8882c40cf2385439bee3b74522c (diff) | |
parent | 1d17082ab2523eb75ee0ca4a49e45da0d0edabd7 (diff) | |
download | pleroma-04b1c135543965860029557fc216eb38fd63b6c7.tar.gz pleroma-04b1c135543965860029557fc216eb38fd63b6c7.zip |
Merge remote-tracking branch 'upstream/develop' into patch-image-description
Diffstat (limited to 'priv/repo/migrations/20190109152453_add_visibility_function.exs')
-rw-r--r-- | priv/repo/migrations/20190109152453_add_visibility_function.exs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/priv/repo/migrations/20190109152453_add_visibility_function.exs b/priv/repo/migrations/20190109152453_add_visibility_function.exs new file mode 100644 index 000000000..3aadabcd7 --- /dev/null +++ b/priv/repo/migrations/20190109152453_add_visibility_function.exs @@ -0,0 +1,48 @@ +defmodule Pleroma.Repo.Migrations.AddVisibilityFunction do + use Ecto.Migration + @disable_ddl_transaction true + + def up do + definition = """ + create or replace function activity_visibility(actor varchar, recipients varchar[], data jsonb) returns varchar as $$ + DECLARE + fa varchar; + public varchar := 'https://www.w3.org/ns/activitystreams#Public'; + BEGIN + SELECT COALESCE(users.follower_address, '') into fa from users where users.ap_id = actor; + + IF data->'to' ? public THEN + RETURN 'public'; + ELSIF data->'cc' ? public THEN + RETURN 'unlisted'; + ELSIF ARRAY[fa] && recipients THEN + RETURN 'private'; + ELSIF not(ARRAY[fa, public] && recipients) THEN + RETURN 'direct'; + ELSE + RETURN 'unknown'; + END IF; + END; + $$ LANGUAGE plpgsql IMMUTABLE; + """ + + execute(definition) + + create( + index(:activities, ["activity_visibility(actor, recipients, data)"], + name: :activities_visibility_index, + concurrently: true + ) + ) + end + + def down do + drop( + index(:activities, ["activity_visibility(actor, recipients, data)"], + name: :activities_visibility_index + ) + ) + + execute("drop function activity_visibility(actor varchar, recipients varchar[], data jsonb)") + end +end |