* Initial bb work * Add billboards to digest * Clean up tests and formatting * Clean up tests and formatting
32 lines
1.3 KiB
Ruby
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
|