diff options
author | Benjamin Neff <benjamin@coding4coffee.ch> | 2017-09-29 02:38:16 +0300 |
---|---|---|
committer | Benjamin Neff <benjamin@coding4coffee.ch> | 2017-10-17 02:23:47 +0300 |
commit | 32067246df724b7f6455f3ef95f747391c48d043 (patch) | |
tree | 5c91f0f631a1cf6e198a6da364000cfc2c653988 /db | |
parent | fd36517dee51d9d78796d81242f91a72f65165b2 (diff) |
Delete people with invalid diaspora IDs (friendica with path)
closes #7630
Diffstat (limited to 'db')
-rw-r--r-- | db/migrate/20170928233609_cleanup_invalid_diaspora_ids.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/db/migrate/20170928233609_cleanup_invalid_diaspora_ids.rb b/db/migrate/20170928233609_cleanup_invalid_diaspora_ids.rb new file mode 100644 index 000000000..f88fec22b --- /dev/null +++ b/db/migrate/20170928233609_cleanup_invalid_diaspora_ids.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class CleanupInvalidDiasporaIds < ActiveRecord::Migration[5.1] + def up + ids = Person.where("diaspora_handle LIKE '%@%/%'").ids + return if ids.empty? + + AspectMembership.joins(:contact).where(contacts: {person_id: ids}).delete_all + + Person.where(id: ids).each do |person| + destroy_notifications_for_person(person) + person.destroy + end + end + + def destroy_notifications_for_person(person) + Notification.joins(:notification_actors).where(notification_actors: {person_id: person.id}).each do |notification| + if notification.notification_actors.count > 1 + notification.notification_actors.where(person_id: person.id).delete_all + else + notification.destroy + end + end + end +end |