VRFS-736 looping through results
This commit is contained in:
parent
cd801d7852
commit
f53ca0010d
|
|
@ -127,13 +127,44 @@ module JamRuby
|
|||
''
|
||||
end
|
||||
|
||||
def fetch_recipients(trigger_idx=0)
|
||||
def fetch_recipients(trigger_idx=0, per_page=500)
|
||||
fetched = []
|
||||
per_page = 500
|
||||
offset = 0
|
||||
prev_date_sql = 0==trigger_idx ? 'tt.prev_trigger_date IS NULL' : "tt.prev_trigger_date + interval '#{self.days_diff(trigger_idx)} days' <= '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}'"
|
||||
sql =<<SQL
|
||||
SELECT tt.*, tt.prev_trigger_date
|
||||
if 0==trigger_idx
|
||||
prev_date_sql = 'tt.prev_trigger_date IS NULL'
|
||||
else
|
||||
prev_date_sql = "tt.prev_trigger_date + interval '#{self.days_diff(trigger_idx)} days' <= '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}'"
|
||||
end
|
||||
countsql =<<SQL
|
||||
SELECT COUNT(*)
|
||||
FROM (SELECT "users".*,
|
||||
(SELECT COALESCE(MAX(ebs.trigger_index),-1)
|
||||
FROM email_batch_sets ebs
|
||||
WHERE
|
||||
ebs.sub_type = '#{self.sub_type}' AND
|
||||
ebs.user_id = users.id
|
||||
) AS tidx,
|
||||
(SELECT created_at
|
||||
FROM email_batch_sets ebs
|
||||
WHERE
|
||||
ebs.sub_type = '#{self.sub_type}' AND
|
||||
ebs.user_id = users.id AND trigger_index = #{trigger_idx - 1}
|
||||
) AS prev_trigger_date
|
||||
FROM users) tt
|
||||
WHERE
|
||||
tt."subscribe_email" = 't' AND
|
||||
tt."musician" = 't' AND
|
||||
(#{progress_column_constraint}) AND
|
||||
(#{self.trigger_date_constraint(trigger_idx)}) AND
|
||||
tt.tidx = #{trigger_idx - 1} AND
|
||||
#{prev_date_sql}
|
||||
SQL
|
||||
num_users = User.count_by_sql(countsql)
|
||||
loops = (num_users / per_page) + (num_users % per_page) - 1
|
||||
0.upto(loops) do |nn|
|
||||
offset = nn * per_page
|
||||
sql =<<SQL
|
||||
SELECT tt.*
|
||||
FROM (SELECT "users".*,
|
||||
(SELECT COALESCE(MAX(ebs.trigger_index),-1)
|
||||
FROM email_batch_sets ebs
|
||||
|
|
@ -159,32 +190,12 @@ ORDER BY tt.id
|
|||
ASC LIMIT #{per_page}
|
||||
OFFSET #{offset}
|
||||
SQL
|
||||
# binding.pry
|
||||
users = User.find_by_sql(sql)
|
||||
block_given? ? yield(users) : fetched.concat(users)
|
||||
# rel = User
|
||||
# .email_opt_in
|
||||
# .musicians
|
||||
# .where("(SELECT COALESCE(MAX(trigger_index),-1) FROM email_batch_sets ebs WHERE ebs.sub_type = '#{self.sub_type}' AND ebs.user_id = users.id) < #{trigger_idx}")
|
||||
# .where(self.progress_column_constraint)
|
||||
# .where(self.trigger_date_constraint(trigger_idx))
|
||||
# .find_in_batches(batch_size: 500) do |users|
|
||||
# block_given? ? yield(users) : fetched.concat(users)
|
||||
# end
|
||||
users = User.find_by_sql(sql)
|
||||
block_given? ? yield(users) : fetched.concat(users)
|
||||
end
|
||||
fetched
|
||||
end
|
||||
|
||||
|
||||
=begin
|
||||
SELECT tt.*
|
||||
FROM (SELECT "users".*,
|
||||
(SELECT COALESCE(MAX(trigger_index),-1) FROM email_batch_sets ebs WHERE ebs.sub_type = 'client_notdl' AND ebs.user_id = users.id) AS tidx,
|
||||
(SELECT created_at FROM email_batch_sets ebs WHERE ebs.sub_type = 'client_notdl' AND ebs.user_id = users.id AND trigger_index = 1) AS prev_trigger_date
|
||||
FROM users) tt
|
||||
WHERE tt."subscribe_email" = 't' AND tt."musician" = 't' AND (tt.first_downloaded_client_at IS NULL) AND (tt.created_at < '2014-05-05 15:00:25.475491') AND tt.tidx = 2 AND tt.prev_trigger_date >= '2014-05-19 15:00:25.475491'
|
||||
ORDER BY tt.id ASC LIMIT 500 OFFSET 0;
|
||||
=end
|
||||
|
||||
def deliver_batch_sets!
|
||||
self.opt_in_count = 0
|
||||
sent = 0
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ describe EmailBatch do
|
|||
|
||||
describe 'all users' do
|
||||
|
||||
before { pending }
|
||||
# before { pending }
|
||||
|
||||
let (:email_batch) { FactoryGirl.create(:email_batch) }
|
||||
|
||||
|
|
@ -58,9 +58,9 @@ describe EmailBatch do
|
|||
|
||||
context 'user progress' do
|
||||
|
||||
describe 'one at a time' do
|
||||
before { pending }
|
||||
|
||||
before { pending }
|
||||
describe 'one at a time' do
|
||||
|
||||
let(:batchp) {
|
||||
FactoryGirl.create(:email_batch_progression, :sub_type => :client_notdl)
|
||||
|
|
@ -79,9 +79,9 @@ describe EmailBatch do
|
|||
expect(ProgressMailer.deliveries.length).to eq(1)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
describe 'client not downloaded' do
|
||||
# before { pending }
|
||||
before { pending }
|
||||
|
||||
let(:batchp) {
|
||||
FactoryGirl.create(:email_batch_progression, :sub_type => :client_notdl)
|
||||
|
|
@ -100,13 +100,11 @@ describe EmailBatch do
|
|||
end
|
||||
|
||||
it 'returns no users' do
|
||||
pending
|
||||
user_
|
||||
expect(batchp.fetch_recipients.count).to eq(0)
|
||||
end
|
||||
|
||||
it 'returns user first trigger' do
|
||||
pending
|
||||
|
||||
user_
|
||||
expect(batchp.fetch_recipients(0).count).to eq(0)
|
||||
|
|
@ -145,7 +143,6 @@ describe EmailBatch do
|
|||
end
|
||||
|
||||
it 'handles existing users' do
|
||||
pending
|
||||
|
||||
user_existing
|
||||
expect(batchp.fetch_recipients(0).count).to eq(1)
|
||||
|
|
@ -206,5 +203,22 @@ describe EmailBatch do
|
|||
end
|
||||
|
||||
end
|
||||
|
||||
describe 'loop bunch of users' do
|
||||
let(:batchp) {
|
||||
FactoryGirl.create(:email_batch_progression, :sub_type => :client_notdl)
|
||||
}
|
||||
it 'returns no users' do
|
||||
users = []
|
||||
20.times { |nn| users << FactoryGirl.create(:user) }
|
||||
expect(batchp.fetch_recipients(0,5).count).to eq(0)
|
||||
dd = users[0].created_at + batchp.days_past_for_trigger_index(0).days
|
||||
Timecop.travel(dd)
|
||||
expect(batchp.fetch_recipients(0,5).count).to eq(20)
|
||||
users.each { |uu| batchp.make_set(uu, 0) }
|
||||
expect(batchp.fetch_recipients(0,5).count).to eq(0)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue