Merge branch 'develop' of bitbucket.org:jamkazam/jam-cloud into develop
This commit is contained in:
commit
14960eb8ae
|
|
@ -106,62 +106,6 @@ module JamRuby
|
|||
self.update_attribute(:test_emails, @counters.inspect)
|
||||
end
|
||||
|
||||
def query
|
||||
ActiveRecord::Base.connection.execute(<<SQL
|
||||
SELECT DISTINCT
|
||||
users.id AS receiver_id,
|
||||
music_sessions.id AS session_id,
|
||||
current_scores.full_score AS latency
|
||||
FROM current_scores
|
||||
INNER JOIN
|
||||
(SELECT
|
||||
msess.id AS session_id,
|
||||
msess.user_id AS creator_id,
|
||||
users.last_jam_locidispid AS creator_score_idx,
|
||||
rs.instrument_id,
|
||||
invitations.receiver_id AS invited_user_id,
|
||||
msess.is_unstructured_rsvp
|
||||
FROM music_sessions msess
|
||||
INNER JOIN users ON users.id = msess.user_id
|
||||
INNER JOIN rsvp_slots AS rs ON rs.music_session_id = msess.id
|
||||
LEFT JOIN rsvp_requests_rsvp_slots AS rrrs ON rrrs.rsvp_slot_id = rs.id
|
||||
LEFT JOIN invitations ON invitations.music_session_id = msess.id
|
||||
WHERE
|
||||
open_rsvps = TRUE OR invitations.id IS NOT NULL AND
|
||||
users.last_jam_locidispid IS NOT NULL AND
|
||||
msess.created_at > '#{earliest_session_create_time}' AND
|
||||
msess.created_at < '#{latest_session_create_time}' AND
|
||||
scheduled_start >= '#{earliest_session_start_time}' AND
|
||||
(rrrs.rsvp_slot_id IS NULL OR rrrs.chosen != TRUE)) AS tmp_candidate_sessions
|
||||
INNER JOIN
|
||||
(SELECT
|
||||
users.id AS receiver_id,
|
||||
users.last_jam_locidispid AS receiver_score_idx,
|
||||
mi.instrument_id
|
||||
INTO TEMP TABLE tmp_candidate_recipients
|
||||
FROM users
|
||||
INNER JOIN musicians_instruments AS mi ON mi.user_id = users.id
|
||||
INNER JOIN tmp_candidate_sessions ON tmp_candidate_sessions.instrument_id = mi.instrument_id OR
|
||||
tmp_candidate_sessions.is_unstructured_rsvp = TRUE OR
|
||||
tmp_candidate_sessions.invited_user_id = users.id
|
||||
|
||||
WHERE
|
||||
users.last_jam_locidispid IS NOT NULL AND
|
||||
users.musician = TRUE AND
|
||||
users.subscribe_email = TRUE) AS tmp_candidate_recipients
|
||||
INNER JOIN tmp_candidate_sessions ON tmp_candidate_sessions.creator_id = current_scores.a_userid
|
||||
INNER JOIN tmp_candidate_recipients ON tmp_candidate_recipients.receiver_id = current_scores.b_userid
|
||||
WHERE
|
||||
current_scores.full_score < #{max_score} AND
|
||||
tmp_candidate_recipients.receiver_id != tmp_candidate_sessions.creator_id
|
||||
GROUP BY
|
||||
tmp_candidate_recipients.receiver_id,
|
||||
tmp_candidate_sessions.session_id,
|
||||
latency
|
||||
SQL
|
||||
)
|
||||
end
|
||||
|
||||
def fetch_recipients(per_page=BATCH_SIZE)
|
||||
objs = []
|
||||
|
||||
|
|
@ -280,14 +224,14 @@ SQL
|
|||
SELECT DISTINCT
|
||||
tmp_candidate_recipients.receiver_id,
|
||||
tmp_candidate_recipients.session_id,
|
||||
current_scores.full_score AS latency
|
||||
nondirected_scores.full_score AS latency
|
||||
INTO TEMP TABLE tmp_matches
|
||||
FROM current_scores
|
||||
FROM nondirected_scores
|
||||
INNER JOIN tmp_candidate_recipients ON
|
||||
tmp_candidate_recipients.creator_id = current_scores.a_userid AND
|
||||
tmp_candidate_recipients.receiver_id = current_scores.b_userid
|
||||
tmp_candidate_recipients.creator_id = nondirected_scores.a_userid AND
|
||||
tmp_candidate_recipients.receiver_id = nondirected_scores.b_userid
|
||||
WHERE
|
||||
current_scores.full_score < #{max_score}
|
||||
nondirected_scores.full_score < #{max_score}
|
||||
GROUP BY
|
||||
tmp_candidate_recipients.receiver_id,
|
||||
tmp_candidate_recipients.session_id,
|
||||
|
|
@ -324,6 +268,7 @@ SQL
|
|||
|
||||
# load mail recipients with minimum score into tmp table
|
||||
_collect_scored_recipients
|
||||
|
||||
end
|
||||
|
||||
def _count_recipients(load_tmp_tables = false)
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
def count_concurrent(in_out_times)
|
||||
in_out_times.sort!
|
||||
in_out_times.sort! { |a,b| a[0] <=> b[0] }
|
||||
|
||||
max_concurrent = 0
|
||||
concurrent = 0
|
||||
|
|
|
|||
|
|
@ -88,6 +88,8 @@ describe EmailBatchScheduledSessions do
|
|||
|
||||
expect(drummer.instruments.include?(drums)).to eq(true)
|
||||
expect(drummer.instruments.include?(guitar)).to eq(true)
|
||||
|
||||
loser.touch
|
||||
end
|
||||
|
||||
describe "everyone but loser has good enough scores" do
|
||||
|
|
@ -105,6 +107,29 @@ describe EmailBatchScheduledSessions do
|
|||
session1.save!
|
||||
end
|
||||
|
||||
it "no duplicate user matches" do
|
||||
|
||||
def ensure_no_dups(obj)
|
||||
found_sessions = obj.map{ |user_and_sessions| user_and_sessions[1] }
|
||||
found_sessions.uniq.length.should == found_sessions.length
|
||||
end
|
||||
|
||||
Score.connection.execute('delete from scores').check
|
||||
1.times { JamRuby::Score.createx(1, 'a', 1, 2, 'a', 2, 10) }
|
||||
2.times { JamRuby::Score.createx(2, 'a', 2, 1, 'a', 1, 20) }
|
||||
3.times { JamRuby::Score.createx(1, 'a', 1, 2, 'a', 2, 15) }
|
||||
4.times { JamRuby::Score.createx(2, 'a', 2, 1, 'a', 1, 35) }
|
||||
|
||||
obj = scheduled_batch.fetch_recipients
|
||||
|
||||
ensure_no_dups(obj)
|
||||
obj.length.should == 1
|
||||
obj[0][1].length.should == 1
|
||||
|
||||
found_users = obj.map{ |user_and_sessions| user_and_sessions[0] }
|
||||
found_users.should == [loser]
|
||||
end
|
||||
|
||||
it 'finds anyone with good enough scores' do
|
||||
obj = scheduled_batch.fetch_recipients
|
||||
found_users = obj.map{ |user_and_sessions| user_and_sessions[0]}
|
||||
|
|
|
|||
Loading…
Reference in New Issue