41905068c0
Attempt to deal with overlapping bundles being created by notifications created immediately one after the other.
53 lines
1.2 KiB
Ruby
53 lines
1.2 KiB
Ruby
class Notification < ApplicationRecord
|
|
include PushNotifiable
|
|
|
|
belongs_to :account, default: -> { user.account }
|
|
belongs_to :user
|
|
belongs_to :creator, class_name: "User"
|
|
belongs_to :source, polymorphic: true
|
|
|
|
scope :unread, -> { where(read_at: nil) }
|
|
scope :read, -> { where.not(read_at: nil) }
|
|
scope :ordered, -> { order(read_at: :desc, created_at: :desc) }
|
|
|
|
after_create_commit :broadcast_unread
|
|
after_destroy_commit :broadcast_read
|
|
after_create_commit :bundle
|
|
|
|
scope :preloaded, -> { preload(:creator, :account, source: [ :board, :creator ]) }
|
|
|
|
delegate :notifiable_target, to: :source
|
|
delegate :card, to: :source
|
|
|
|
def self.read_all
|
|
all.each { |notification| notification.read }
|
|
end
|
|
|
|
def read
|
|
update!(read_at: Time.current)
|
|
broadcast_read
|
|
end
|
|
|
|
def unread
|
|
update!(read_at: nil)
|
|
broadcast_unread
|
|
end
|
|
|
|
def read?
|
|
read_at.present?
|
|
end
|
|
|
|
private
|
|
def broadcast_unread
|
|
broadcast_prepend_later_to user, :notifications, target: "notifications"
|
|
end
|
|
|
|
def broadcast_read
|
|
broadcast_remove_to user, :notifications
|
|
end
|
|
|
|
def bundle
|
|
user.bundle(self) if user.settings.bundling_emails?
|
|
end
|
|
end
|