Files
fizzy/app/models/card/readable.rb
T
2026-02-17 13:57:24 +01:00

48 lines
1.2 KiB
Ruby

module Card::Readable
extend ActiveSupport::Concern
def read_by(user)
user.notifications.find_by(card: self)&.tap(&:read)
end
def unread_by(user)
user.notifications.find_by(card: self)&.tap(&:unread)
end
def remove_inaccessible_notifications
accessible_user_ids = board.accesses.pluck(:user_id)
notification_sources.each do |sources|
inaccessible_notifications_from(sources, accessible_user_ids).in_batches.destroy_all
end
end
private
def remove_inaccessible_notifications_later
Card::RemoveInaccessibleNotificationsJob.perform_later(self)
end
def event_notification_sources
events.or(comment_creation_events)
end
def comment_creation_events
Event.where(eventable: comments)
end
def inaccessible_notifications_from(sources, accessible_user_ids)
Notification.where(source: sources).where.not(user_id: accessible_user_ids)
end
def notification_sources
[ events, comment_creation_events, mentions, comment_mentions ]
end
def mention_notification_sources
mentions.or(comment_mentions)
end
def comment_mentions
Mention.where(source: comments)
end
end