First
[anni] / priv / repo / migrations / 20190122153157_update_activity_visibility.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Repo.Migrations.UpdateActivityVisibility do
6   use Ecto.Migration
7   @disable_ddl_transaction true
8
9   def up do
10     definition = """
11     create or replace function activity_visibility(actor varchar, recipients varchar[], data jsonb) returns varchar as $$
12     DECLARE
13       fa varchar;
14       public varchar := 'https://www.w3.org/ns/activitystreams#Public';
15     BEGIN
16       SELECT COALESCE(users.follower_address, '') into fa from users where users.ap_id = actor;
17
18       IF data->'to' ? public THEN
19         RETURN 'public';
20       ELSIF data->'cc' ? public THEN
21         RETURN 'unlisted';
22       ELSIF ARRAY[fa] && recipients THEN
23         RETURN 'private';
24       ELSIF not(ARRAY[fa, public] && recipients) THEN
25         RETURN 'direct';
26       ELSE
27         RETURN 'unknown';
28       END IF;
29     END;
30     $$ LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE SECURITY DEFINER;
31     """
32
33     execute(definition)
34   end
35
36   def down do
37   end
38 end