49 lines
1.3 KiB
Ruby
49 lines
1.3 KiB
Ruby
module JamRuby
|
|
class EmailBatchNewMusician < EmailBatchPeriodic
|
|
|
|
BATCH_SIZE = 500
|
|
|
|
SINCE_WEEKS = 2
|
|
|
|
VAR_MUSICIAN_COUNT = "@MUSICIAN_COUNT"
|
|
VAR_MUSICIAN_TABLE = "@MUSICIAN_TABLE"
|
|
|
|
def self.subject
|
|
"New musicians with good Internet connections to you have joined JamKazam!"
|
|
end
|
|
|
|
def fetch_recipients(since=nil)
|
|
since ||= Time.now - SINCE_WEEKS.weeks
|
|
User.geocoded_users
|
|
.email_opt_in
|
|
.where(['created_at < ?', since])
|
|
.find_in_batches(batch_size: EmailBatchNewMusician::BATCH_SIZE) do |users|
|
|
new_musicians = users.inject({}) do |hh, uu|
|
|
if 0 < (nearby = uu.nearest_musicians).count
|
|
hh[uu] = nearby
|
|
end
|
|
hh
|
|
end
|
|
yield(new_musicians) if block_given?
|
|
end
|
|
end
|
|
|
|
def deliver_batch_sets!
|
|
self.opt_in_count = 0
|
|
sent = 0
|
|
self.fetch_recipients(self.time_since_last_batch(SINCE_WEEKS)) do |new_musicians|
|
|
self.opt_in_count += new_musicians.count
|
|
self.email_batch_sets << (bset = EmailBatchSet.load_set(self, new_musicians.keys.map(&:id)))
|
|
new_musicians.each do |uu, nearby|
|
|
UserMailer.new_musicians(uu, nearby).deliver
|
|
sent += 1
|
|
end
|
|
end
|
|
self.sent_count = sent
|
|
self.save
|
|
self.did_batch_run!
|
|
end
|
|
|
|
end
|
|
end
|