Class: BlogUpdateWorker

Inherits:
Object
  • Object
show all
Includes:
Sidekiq::Worker
Defined in:
app/workers/blog_update_worker.rb

Overview

Creates a CampaignEmail on Campaign 527 each Monday at 2pm Central when new posts exist.
The campaign system handles delivery, suppression, dedup, and open/click tracking.

Constant Summary collapse

CAMPAIGN_ID =
527
MASTER_TEMPLATE_SYSTEM_CODE =
'BLOG_UPDATE'
RECENT_ARTICLES_COUNT =
5
SENDER_EMAIL =
'"WarmlyYours" <marketing@warmlyyours.com>'

Instance Method Summary collapse

Instance Method Details

#performObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/workers/blog_update_worker.rb', line 15

def perform
  new_posts = posts_since_last_monday
  return if new_posts.empty?

  master_template = EmailTemplate.find_by(system_code: MASTER_TEMPLATE_SYSTEM_CODE)
  unless master_template&.body_v4_email.present?
    logger.error '[BlogUpdateWorker] BLOG_UPDATE master template not found or has no body_v4_email'
    return
  end

  recent_posts = Post.published
                     .where.not(id: new_posts.map(&:id))
                     .order(published_at: :desc)
                     .limit(RECENT_ARTICLES_COUNT)

  rendered_body = render_weekly_body(master_template, new_posts, recent_posts)
  campaign_email = create_campaign_email(master_template, rendered_body, new_posts)

  logger.info "[BlogUpdateWorker] Created CampaignEmail ##{campaign_email.id} with #{new_posts.size} new post(s)"
  campaign_email.transmit_now!
end