First
[anni] / priv / repo / migrations / 20190303120636_update_user_note_counters.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.UpdateUserNoteCounters do
6   use Ecto.Migration
7
8   @public "https://www.w3.org/ns/activitystreams#Public"
9
10   def up do
11     execute("""
12       WITH public_note_count AS (
13         SELECT
14           data->>'actor' AS actor,
15           count(id) AS count
16         FROM objects
17         WHERE data->>'type' = 'Note' AND (
18           data->'cc' ? '#{@public}' OR data->'to' ? '#{@public}'
19         )
20         GROUP BY data->>'actor'
21       )
22       UPDATE users AS u
23       SET "info" = jsonb_set(u.info, '{note_count}', o.count::varchar::jsonb, true)
24       FROM public_note_count AS o
25       WHERE u.ap_id = o.actor
26     """)
27   end
28
29   def down do
30     execute("""
31       WITH public_note_count AS (
32         SELECT
33           data->>'actor' AS actor,
34           count(id) AS count
35         FROM objects
36         WHERE data->>'type' = 'Note'
37         GROUP BY data->>'actor'
38       )
39       UPDATE users AS u
40       SET "info" = jsonb_set(u.info, '{note_count}', o.count::varchar::jsonb, true)
41       FROM public_note_count AS o
42       WHERE u.ap_id = o.actor
43     """)
44   end
45 end