about summary refs log tree commit diff
path: root/db/migrate/20200816200239_backfill_root_to_conversations.rb
diff options
context:
space:
mode:
authorFire Demon <firedemon@creature.cafe>2020-08-16 23:18:38 -0500
committerFire Demon <firedemon@creature.cafe>2020-08-30 05:45:18 -0500
commitb1e6e6957e62f3da3857f42ec6c343cb9660434d (patch)
treee1305ef8cf98aabe10fa58c8bc27d0408c681066 /db/migrate/20200816200239_backfill_root_to_conversations.rb
parentaf0b6f445c597b41e861da9e77f39b4caed3e753 (diff)
[Federation] Include and dereference URI to the root post of threads; dynamically update thread permissions
Diffstat (limited to 'db/migrate/20200816200239_backfill_root_to_conversations.rb')
-rw-r--r--db/migrate/20200816200239_backfill_root_to_conversations.rb19
1 files changed, 19 insertions, 0 deletions
diff --git a/db/migrate/20200816200239_backfill_root_to_conversations.rb b/db/migrate/20200816200239_backfill_root_to_conversations.rb
new file mode 100644
index 000000000..2056e0765
--- /dev/null
+++ b/db/migrate/20200816200239_backfill_root_to_conversations.rb
@@ -0,0 +1,19 @@
+class BackfillRootToConversations < ActiveRecord::Migration[5.2]
+  disable_ddl_transaction!
+
+  def up
+    Rails.logger.info("Adding URI to statuses without one...")
+    Status.where(uri: nil).or(Status.where(uri: '')).find_each do |status|
+      status.update(uri: ActivityPub::TagManager.instance.uri_for(status))
+    end
+
+    Rails.logger.info('Setting root of all conversations...')
+    safety_assured do
+      execute('UPDATE conversations SET root = s.uri FROM (SELECT conversation_id, uri FROM statuses WHERE NOT reply) AS s WHERE conversations.id = s.conversation_id')
+    end
+  end
+
+  def down
+    true
+  end
+end