class Notification < ApplicationRecord include PushNotifiable belongs_to :account, default: -> { Current.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 :bundle 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