Files
fizzy/app/models/notification.rb
T
Jorge Manrubia 41905068c0 Bundle after notification is committed to mitigate reading stale data when bundling
Attempt to deal with overlapping bundles being created by notifications created immediately
one after the other.
2025-11-21 14:34:05 +01:00

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