+3
-1
app/firehose_client.rb
+3
-1
app/firehose_client.rb
+5
app/models/post.rb
+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
+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