Don't forget to lycansubscribe

delete user's posts and all references on account delete

Changed files
+26 -6
app
+3 -1
app/firehose_client.rb
··· 133 133 134 134 def process_account_event(msg) 135 135 if msg.status == :deleted 136 - # ... 136 + if user = User.find_by(did: msg.repo) 137 + user.destroy 138 + end 137 139 end 138 140 end 139 141
+5
app/models/post.rb
··· 12 12 13 13 belongs_to :user 14 14 15 + has_many :likes, dependent: :delete_all 16 + has_many :reposts, dependent: :delete_all 17 + has_many :pins, dependent: :delete_all 18 + has_many :quotes, dependent: :delete_all 19 + 15 20 def self.find_by_at_uri(uri) 16 21 uri = AT_URI(uri) unless uri.is_a?(AT_URI) 17 22 return nil unless uri.is_post?
+18 -5
app/models/user.rb
··· 12 12 validates_length_of :did, maximum: 260 13 13 14 14 has_many :posts 15 - has_many :imports 15 + has_many :imports, dependent: :delete_all 16 16 17 - has_many :likes, foreign_key: 'actor_id' do 17 + before_destroy :delete_posts_cascading 18 + 19 + has_many :likes, foreign_key: 'actor_id', dependent: :delete_all do 18 20 def import_from_record(like_uri, record) 19 21 like = self.new_from_record(like_uri, record) 20 22 return nil if like.nil? || self.where(rkey: like.rkey).exists? ··· 23 25 end 24 26 end 25 27 26 - has_many :reposts, foreign_key: 'actor_id' do 28 + has_many :reposts, foreign_key: 'actor_id', dependent: :delete_all do 27 29 def import_from_record(repost_uri, record) 28 30 repost = self.new_from_record(repost_uri, record) 29 31 return nil if repost.nil? || self.where(rkey: repost.rkey).exists? ··· 32 34 end 33 35 end 34 36 35 - has_many :quotes, foreign_key: 'actor_id' do 37 + has_many :quotes, foreign_key: 'actor_id', dependent: :delete_all do 36 38 def import_from_record(post_uri, record) 37 39 quote = self.new_from_record(post_uri, record) 38 40 return nil if quote.nil? || self.where(rkey: quote.rkey).exists? ··· 41 43 end 42 44 end 43 45 44 - has_many :pins, foreign_key: 'actor_id' do 46 + has_many :pins, foreign_key: 'actor_id', dependent: :delete_all do 45 47 def import_from_record(post_uri, record) 46 48 pin = self.new_from_record(post_uri, record) 47 49 return nil if pin.nil? || self.where(rkey: pin.rkey).exists? ··· 56 58 57 59 def all_pending_items 58 60 [:likes, :reposts, :quotes, :pins].map { |x| self.send(x).pending.to_a }.reduce(&:+) 61 + end 62 + 63 + def delete_posts_cascading 64 + posts_subquery = self.posts.select(:id) 65 + 66 + Like.where(post_id: posts_subquery).delete_all 67 + Repost.where(post_id: posts_subquery).delete_all 68 + Pin.where(post_id: posts_subquery).delete_all 69 + Quote.where(post_id: posts_subquery).delete_all 70 + 71 + Post.where(user: self).delete_all 59 72 end 60 73 end