@ -22,6 +22,7 @@ class Notification < ApplicationRecord
follow : 'Follow' ,
follow : 'Follow' ,
follow_request : 'FollowRequest' ,
follow_request : 'FollowRequest' ,
favourite : 'Favourite' ,
favourite : 'Favourite' ,
poll : 'Poll' ,
} . freeze
} . freeze
STATUS_INCLUDES = [ :account , :application , :media_attachments , :tags , active_mentions : :account , reblog : [ :account , :application , :media_attachments , :tags , active_mentions : :account ] ] . freeze
STATUS_INCLUDES = [ :account , :application , :media_attachments , :tags , active_mentions : :account , reblog : [ :account , :application , :media_attachments , :tags , active_mentions : :account ] ] . freeze
@ -35,6 +36,7 @@ class Notification < ApplicationRecord
belongs_to :follow , foreign_type : 'Follow' , foreign_key : 'activity_id' , optional : true
belongs_to :follow , foreign_type : 'Follow' , foreign_key : 'activity_id' , optional : true
belongs_to :follow_request , foreign_type : 'FollowRequest' , foreign_key : 'activity_id' , optional : true
belongs_to :follow_request , foreign_type : 'FollowRequest' , foreign_key : 'activity_id' , optional : true
belongs_to :favourite , foreign_type : 'Favourite' , foreign_key : 'activity_id' , optional : true
belongs_to :favourite , foreign_type : 'Favourite' , foreign_key : 'activity_id' , optional : true
belongs_to :poll , foreign_type : 'Poll' , foreign_key : 'activity_id' , optional : true
validates :account_id , uniqueness : { scope : [ :activity_type , :activity_id ] }
validates :account_id , uniqueness : { scope : [ :activity_type , :activity_id ] }
validates :activity_type , inclusion : { in : TYPE_CLASS_MAP . values }
validates :activity_type , inclusion : { in : TYPE_CLASS_MAP . values }
@ -44,7 +46,7 @@ class Notification < ApplicationRecord
where ( activity_type : types )
where ( activity_type : types )
}
}
cache_associated :from_account , status : STATUS_INCLUDES , mention : [ status : STATUS_INCLUDES ] , favourite : [ :account , status : STATUS_INCLUDES ] , follow : :account
cache_associated :from_account , status : STATUS_INCLUDES , mention : [ status : STATUS_INCLUDES ] , favourite : [ :account , status : STATUS_INCLUDES ] , follow : :account , poll : [ status : STATUS_INCLUDES ]
def type
def type
@type || = TYPE_CLASS_MAP . invert [ activity_type ] . to_sym
@type || = TYPE_CLASS_MAP . invert [ activity_type ] . to_sym
@ -58,6 +60,8 @@ class Notification < ApplicationRecord
favourite & . status
favourite & . status
when :mention
when :mention
mention & . status
mention & . status
when :poll
poll & . status
end
end
end
end
@ -97,7 +101,7 @@ class Notification < ApplicationRecord
return unless new_record?
return unless new_record?
case activity_type
case activity_type
when 'Status' , 'Follow' , 'Favourite' , 'FollowRequest'
when 'Status' , 'Follow' , 'Favourite' , 'FollowRequest' , 'Poll'
self . from_account_id = activity & . account_id
self . from_account_id = activity & . account_id
when 'Mention'
when 'Mention'
self . from_account_id = activity & . status & . account_id
self . from_account_id = activity & . status & . account_id