docbrown/app/workers/emails/send_user_digest_worker.rb
Ben Halpern cbae624b5e
Add billboards to digest emails (#20862)
* Initial bb work

* Add billboards to digest

* Clean up tests and formatting

* Clean up tests and formatting
2024-04-15 12:01:00 -04:00

32 lines
1.3 KiB
Ruby

module Emails
class SendUserDigestWorker
include Sidekiq::Job
sidekiq_options queue: :low_priority, retry: 15, lock: :until_executing
def perform(user_id)
user = User.find_by(id: user_id)
return unless user&.notification_setting&.email_digest_periodic? && user&.registered?
articles = EmailDigestArticleCollector.new(user).articles_to_send
tags = user.cached_followed_tag_names&.first(12)
first_billboard = Billboard.for_display(area: "digest_first",
user_id: user.id,
user_tags: tags,
user_signed_in: true)
second_billboard = Billboard.for_display(area: "digest_second",
user_id: user.id,
user_tags: tags,
user_signed_in: true)
return unless articles.any?
begin
DigestMailer.with(user: user, articles: articles.to_a, billboards: [first_billboard, second_billboard])
.digest_email.deliver_now
rescue StandardError => e
Honeybadger.context({ user_id: user.id, article_ids: articles.map(&:id) })
Honeybadger.notify(e)
end
end
end
end