VRFS-1664 added paging to fetc_recipients

This commit is contained in:
Jonathan Kolyer 2014-06-02 02:31:42 +00:00
parent e35e318884
commit 2719b35dee
1 changed files with 21 additions and 14 deletions

View File

@ -60,7 +60,7 @@ SQL
ActiveRecord::Base.connection.execute(sql)
end
def fetch_recipients
def fetch_recipients(per_page=500)
objs = []
# load new musicians into tmp table
self._fetch_new_musicians
@ -68,20 +68,27 @@ SQL
# load email receivers into tmp table
self._fetch_eligible_receivers
sql = "SELECT DISTINCT receiver_id FROM #{TMP_PAIRS} GROUP BY receiver_id"
ActiveRecord::Base.connection.execute(sql).each do |result|
receiver = User.find_by_id(result['receiver_id'])
sql = "SELECT new_user_id, latency FROM #{TMP_PAIRS} WHERE receiver_id = '#{receiver.id}'"
new_musicians = ActiveRecord::Base.connection.execute(sql).collect do |rr|
new_user = User.where(['id = ?',rr['new_user_id']])
.limit(1)
.includes([:instruments])
.first
new_user.latency_store = result['latency']
new_user
countsql = "SELECT DISTINCT COUNT(receiver_id) AS num FROM #{TMP_PAIRS} GROUP BY receiver_id"
num_pair = ActiveRecord::Base.connection.execute(countsql)[0]['num'].to_i
loops = (num_pair / per_page) + (num_pair % per_page) - 1
0.upto(loops) do |nn|
offset = nn * per_page
sql =<<SQL
SELECT DISTINCT receiver_id
FROM #{TMP_PAIRS}
GROUP BY receiver_id
ORDER BY receiver_id ASC
LIMIT #{per_page}
OFFSET #{offset}
SQL
ActiveRecord::Base.connection.execute(sql).each do |result|
receiver = User.find_by_id(result['receiver_id'])
new_musicians = User.select("users.*, #{TMP_PAIRS}.latency")
.joins("INNER JOIN #{TMP_PAIRS} ON #{TMP_PAIRS}.new_user_id = users.id")
.where(["#{TMP_PAIRS}.receiver_id = ?", receiver.id])
.includes(:instruments)
block_given? ? yield(receiver, new_musicians) : objs << [receiver, new_musicians]
end
block_given? ? yield(receiver, new_musicians) : objs << [receiver, new_musicians]
end
objs
end