@ -11,6 +11,7 @@ class Notification < ApplicationRecord
belongs_to :mention , foreign_type : 'Mention' , foreign_key : 'activity_id'
belongs_to :status , foreign_type : 'Status' , foreign_key : 'activity_id'
belongs_to :follow , foreign_type : 'Follow' , foreign_key : 'activity_id'
belongs_to :follow_request , foreign_type : 'FollowRequest' , foreign_key : 'activity_id'
belongs_to :favourite , foreign_type : 'Favourite' , foreign_key : 'activity_id'
validates :account_id , uniqueness : { scope : [ :activity_type , :activity_id ] }
@ -18,6 +19,7 @@ class Notification < ApplicationRecord
STATUS_INCLUDES = [ :account , :stream_entry , :media_attachments , :tags , mentions : :account , reblog : [ :stream_entry , :account , :media_attachments , :tags , mentions : :account ] ] . freeze
scope :cache_ids , - > { select ( :id , :updated_at , :activity_type , :activity_id ) }
scope :browserable , - > { where . not ( activity_type : [ 'FollowRequest' ] ) }
cache_associated :from_account , status : STATUS_INCLUDES , mention : [ status : STATUS_INCLUDES ] , favourite : [ :account , status : STATUS_INCLUDES ] , follow : :account
@ -30,7 +32,7 @@ class Notification < ApplicationRecord
when 'Status'
:reblog
else
activity_type . downcas e. to_sym
activity_type . underscor e. to_sym
end
end
@ -43,6 +45,10 @@ class Notification < ApplicationRecord
end
end
def browserable?
type != :follow_request
end
class << self
def reload_stale_associations! ( cached_items )
account_ids = cached_items . map ( & :from_account_id ) . uniq
@ -61,7 +67,7 @@ class Notification < ApplicationRecord
def set_from_account
case activity_type
when 'Status' , 'Follow' , 'Favourite'
when 'Status' , 'Follow' , 'Favourite' , 'FollowRequest'
self . from_account_id = activity ( false ) & . account_id
when 'Mention'
self . from_account_id = activity ( false ) & . status & . account_id