41 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
defmodule Pleroma.Repo.Migrations.UpdateUserNoteCounters do
 | 
						|
  use Ecto.Migration
 | 
						|
 | 
						|
  @public "https://www.w3.org/ns/activitystreams#Public"
 | 
						|
 | 
						|
  def up do
 | 
						|
    execute("""
 | 
						|
      WITH public_note_count AS (
 | 
						|
        SELECT
 | 
						|
          data->>'actor' AS actor,
 | 
						|
          count(id) AS count
 | 
						|
        FROM objects
 | 
						|
        WHERE data->>'type' = 'Note' AND (
 | 
						|
          data->'cc' ? '#{@public}' OR data->'to' ? '#{@public}'
 | 
						|
        )
 | 
						|
        GROUP BY data->>'actor'
 | 
						|
      )
 | 
						|
      UPDATE users AS u
 | 
						|
      SET "info" = jsonb_set(u.info, '{note_count}', o.count::varchar::jsonb, true)
 | 
						|
      FROM public_note_count AS o
 | 
						|
      WHERE u.ap_id = o.actor
 | 
						|
    """)
 | 
						|
  end
 | 
						|
 | 
						|
  def down do
 | 
						|
    execute("""
 | 
						|
      WITH public_note_count AS (
 | 
						|
        SELECT
 | 
						|
          data->>'actor' AS actor,
 | 
						|
          count(id) AS count
 | 
						|
        FROM objects
 | 
						|
        WHERE data->>'type' = 'Note'
 | 
						|
        GROUP BY data->>'actor'
 | 
						|
      )
 | 
						|
      UPDATE users AS u
 | 
						|
      SET "info" = jsonb_set(u.info, '{note_count}', o.count::varchar::jsonb, true)
 | 
						|
      FROM public_note_count AS o
 | 
						|
      WHERE u.ap_id = o.actor
 | 
						|
    """)
 | 
						|
  end
 | 
						|
end
 |