Merge branch 'replies-count' into 'develop'
[akkoma] / priv / repo / migrations / 20190325215156_update_status_reply_count.exs
1 defmodule Pleroma.Repo.Migrations.UpdateStatusReplyCount do
2 use Ecto.Migration
3
4 @public "https://www.w3.org/ns/activitystreams#Public"
5
6 def up do
7 execute("""
8 WITH reply_count AS (
9 SELECT count(*) AS count, data->>'inReplyTo' AS ap_id
10 FROM objects
11 WHERE
12 data->>'inReplyTo' IS NOT NULL AND
13 data->>'type' = 'Note' AND (
14 data->'cc' ? '#{@public}' OR
15 data->'to' ? '#{@public}')
16 GROUP BY data->>'inReplyTo'
17 )
18 UPDATE objects AS o
19 SET "data" = jsonb_set(o.data, '{repliesCount}', reply_count.count::varchar::jsonb, true)
20 FROM reply_count
21 WHERE reply_count.ap_id = o.data->>'id';
22 """)
23
24 execute("""
25 WITH reply_count AS (SELECT
26 count(*) as count,
27 data->'object'->>'inReplyTo' AS ap_id
28 FROM
29 activities
30 WHERE
31 data->'object'->>'inReplyTo' IS NOT NULL AND
32 data->'object'->>'type' = 'Note' AND (
33 data->'object'->'cc' ? '#{@public}' OR
34 data->'object'->'to' ? '#{@public}')
35 GROUP BY
36 data->'object'->>'inReplyTo'
37 )
38 UPDATE activities AS a
39 SET "data" = jsonb_set(a.data, '{object, repliesCount}', reply_count.count::varchar::jsonb, true)
40 FROM reply_count
41 WHERE reply_count.ap_id = a.data->'object'->>'id';
42 """)
43 end
44
45 def down do
46 :noop
47 end
48 end