From 9c0afd6ccd52d4849bfa28a4c593d920eca56d4a Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Mon, 2 Jun 2014 01:56:26 +0000 Subject: [PATCH 01/25] VRFS-1664 fixed var name --- .../app/views/jam_ruby/user_mailer/new_musicians.html.erb | 2 +- .../app/views/jam_ruby/user_mailer/new_musicians.text.erb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb index c7299aa3f..0a48b367e 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb @@ -7,7 +7,7 @@ Hi <%= @user.first_name %>, <% link_style = "background-color:#ED3618; margin:0px 8px 0px 8px; border: solid 1px #F27861; outline: solid 2px #ED3618; padding:3px 10px; font-family:Raleway, Arial, Helvetica, sans-serif; font-size:12px; font-weight:300; cursor:pointer; color:#FC9; text-decoration:none;" %>

-<% @new_nearby.each do |user| %> +<% @new_musicians.each do |user| %> - + <% end %>
<%= user.name %>
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb index f1b51b9d7..c1d1c236a 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb @@ -1,10 +1,10 @@ -New JamKazam Musicians in your Area +New Musicians You Should Check Out Hi <%= @user.first_name %>, The following new musicians have joined JamKazam within the last week, and have Internet connections with low enough latency to you that you can have a good online session together. We'd suggest that you look through the new musicians listed below to see if any match your musical interests, and if so, click through to their profile page on the JamKazam website to send them a message or a request to connect as a JamKazam friend: -<% @new_nearby.each do |user| %> +<% @new_musicians.each do |user| %> <%= user.name %> (http://<%= @host %>/client#/profile/<%= user.id %>) <%= user.location %> <% user.instruments.collect { |inst| inst.description }.join(', ') %> From e35e31888420825f0bd6ec7d56db1c560767497c Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Mon, 2 Jun 2014 02:11:00 +0000 Subject: [PATCH 02/25] VRFS-1664 replace tmp tbl with subquery --- .../models/email_batch_new_musician.rb | 38 +++++++------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb index 819ecdbbc..1e6f1cb70 100644 --- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb +++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb @@ -9,7 +9,6 @@ module JamRuby VAR_MUSICIAN_TABLE = "@MUSICIAN_TABLE" TMP_NEW = 'tmp_new_musicians' - TMP_CAND = 'tmp_receiver_candidates' TMP_PAIRS = 'tmp_receivers_new_musicians' def self.subject @@ -32,37 +31,31 @@ SQL ActiveRecord::Base.connection.execute(sql) end - def _fetch_receiver_candidates - ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_CAND}") - sql =< Date: Mon, 2 Jun 2014 02:31:42 +0000 Subject: [PATCH 03/25] VRFS-1664 added paging to fetc_recipients --- .../models/email_batch_new_musician.rb | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb index 1e6f1cb70..e73bce1bc 100644 --- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb +++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb @@ -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 =< Date: Sun, 1 Jun 2014 22:34:32 -0400 Subject: [PATCH 04/25] renamed scheduled_session.js to session_info.js --- .../javascripts/web/{scheduled_session.js => session_info.js} | 0 web/app/assets/javascripts/web/web.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename web/app/assets/javascripts/web/{scheduled_session.js => session_info.js} (100%) diff --git a/web/app/assets/javascripts/web/scheduled_session.js b/web/app/assets/javascripts/web/session_info.js similarity index 100% rename from web/app/assets/javascripts/web/scheduled_session.js rename to web/app/assets/javascripts/web/session_info.js diff --git a/web/app/assets/javascripts/web/web.js b/web/app/assets/javascripts/web/web.js index edf1ca888..819bbb975 100644 --- a/web/app/assets/javascripts/web/web.js +++ b/web/app/assets/javascripts/web/web.js @@ -53,7 +53,7 @@ //= require web/downloads //= require web/congratulations //= require web/sessions -//= require web/scheduled_session +//= require web/session_info //= require web/recordings //= require web/welcome //= require banner From 7ea659c71f4f0123d91403ff2f02c71389aa5c42 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Mon, 2 Jun 2014 06:01:55 +0000 Subject: [PATCH 05/25] VRFS-1665 rewrote daily email queries and adding pagination; other tweaks --- .../scheduled_session_daily.html.erb | 2 +- .../scheduled_session_daily.text.erb | 2 +- .../models/email_batch_new_musician.rb | 4 +- .../models/email_batch_scheduled_sessions.rb | 110 +++++++++++------- ruby/lib/jam_ruby/models/music_session.rb | 3 - ruby/lib/jam_ruby/models/user.rb | 3 - .../email_batch_spec_scheduled_session.rb | 6 +- 7 files changed, 79 insertions(+), 51 deletions(-) diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.html.erb index 40788d8de..0d6ba9a6b 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.html.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.html.erb @@ -25,7 +25,7 @@
<%= sess.genre.description %> <%= sess.description %><%= sess.latency_store %><%= sess.latency %>
diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.text.erb index 16ce1e7c1..423c57f44 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.text.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/scheduled_session_daily.text.erb @@ -11,7 +11,7 @@ Take a look through these new sessions below, and just click the RSVP button on GENRE | DESCRIPTION | LATENCY <% @sessions_and_latency.each do |sess| %> -<%= sess.genre.description %> | <%= sess.description %> | <%= sess.latency_store %> +<%= sess.genre.description %> | <%= sess.description %> | <%= sess.latency %> <% end %> To see ALL the scheduled sessions that you might be interested in joining, view our Find Session page at: http://www.jamkazam.com/client#/findSession. diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb index e73bce1bc..8f16b8d7f 100644 --- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb +++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb @@ -69,7 +69,9 @@ SQL self._fetch_eligible_receivers 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 + rr = ActiveRecord::Base.connection.execute(countsql) + num_pair = 0 < rr.count ? rr[0]['num'].to_i : 0 + loops = (num_pair / per_page) + (num_pair % per_page) - 1 0.upto(loops) do |nn| offset = nn * per_page diff --git a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb index d3903a5a9..f5b26e7e3 100644 --- a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb +++ b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb @@ -5,8 +5,9 @@ module JamRuby SINCE_DAYS = 2 MIN_HOURS_START = 2 - TMP_SNAP = 'tmp_scheduled_session_snapshot' - TMP_USER = 'tmp_scheduled_session_user' + TMP_SESS = 'tmp_candidate_sessions' + TMP_RECIP = 'tmp_candidate_recipients' + TMP_MATCH = 'tmp_matches' def self.subject "New sessions have been scheduled that may be a good match for you!" @@ -14,22 +15,23 @@ module JamRuby # inserts eligible sessions to temp table def _collect_eligible_sessions - ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_SNAP}") + ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_SESS}") sql =< '#{time_since_last_batch(SINCE_DAYS)}' AND + msess.created_at < '#{self.created_at}' AND scheduled_start >= '#{Time.now() + MIN_HOURS_START.hours}' AND (rrrs.rsvp_slot_id IS NULL OR rrrs.chosen != 't') SQL @@ -37,41 +39,65 @@ SQL end def _collect_eligible_recipients - ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_USER}") + ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_RECIP}") # load eligible recipients into tmp table sql =< offset + sql =< drummer, :scheduled_start => Time.now() + 2.days, :musician_access => true, - :approval_required => false) + :approval_required => false, + :created_at => Time.now - 1.hour) end let (:session2) do FactoryGirl.create(:music_session, :creator => drummer, :scheduled_start => Time.now() + 2.days, :musician_access => true, - :approval_required => false) + :approval_required => false, + :created_at => Time.now - 1.hour) end before(:each) do From 1f726df3209b678d030e97f284cc019075468890 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Mon, 2 Jun 2014 06:17:31 +0000 Subject: [PATCH 06/25] VRFS-1665 prevent session creator from getting notified of sessions --- .../lib/jam_ruby/models/email_batch_scheduled_sessions.rb | 8 ++++++-- .../jam_ruby/models/email_batch_spec_scheduled_session.rb | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb index f5b26e7e3..d9c8c915e 100644 --- a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb +++ b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb @@ -68,8 +68,12 @@ FROM scores INNER JOIN #{TMP_SESS} ON #{TMP_SESS}.creator_score_idx = scores.alocidispid INNER JOIN #{TMP_RECIP} ON #{TMP_RECIP}.receiver_score_idx = scores.blocidispid WHERE - scores.score < #{Score::MAX_YELLOW_LATENCY} -GROUP BY #{TMP_RECIP}.receiver_id, #{TMP_SESS}.session_id, latency + scores.score < #{Score::MAX_YELLOW_LATENCY} AND + #{TMP_RECIP}.receiver_id != #{TMP_SESS}.creator_id +GROUP BY + #{TMP_RECIP}.receiver_id, + #{TMP_SESS}.session_id, + latency SQL ActiveRecord::Base.connection.execute(sql) end diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb b/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb index 1e591177b..3b235a199 100644 --- a/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb +++ b/ruby/spec/jam_ruby/models/email_batch_spec_scheduled_session.rb @@ -95,7 +95,7 @@ describe EmailBatchScheduledSessions do expect(drummer.instruments.include?(drums)).to eq(true) expect(drummer.instruments.include?(guitar)).to eq(true) obj = scheduled_batch.fetch_recipients - expect(obj.count).to eq(3) + expect(obj.count).to eq(2) end it 'sends email' do From d36ec17436b03124c1f2a1f1e370524a99a11355 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Tue, 3 Jun 2014 03:25:23 +0000 Subject: [PATCH 07/25] VRFS-1664 fixed mail sending test --- ruby/lib/jam_ruby/app/mailers/user_mailer.rb | 1 - .../app/views/jam_ruby/user_mailer/new_musicians.html.erb | 2 +- .../app/views/jam_ruby/user_mailer/new_musicians.text.erb | 2 +- ruby/lib/jam_ruby/models/email_batch_new_musician.rb | 2 +- ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb | 4 ++-- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb index 29ddc3e68..a292357f3 100644 --- a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb +++ b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb @@ -104,7 +104,6 @@ def new_musicians(user, new_musicians, host='www.jamkazam.com') @user, @new_musicians, @host = user, new_musicians, host - sendgrid_recipients([user.email]) sendgrid_substitute('@USERID', [user.id]) sendgrid_unique_args :type => "new_musicians" diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb index 0a48b367e..8551c23df 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.html.erb @@ -24,7 +24,7 @@ Hi <%= @user.first_name %>, <% end %>

-

There are currently <%= @new_nearby.size%> musicians on JamKazam with low enough latency Internet connections to you to support a good online session. To see ALL the JamKazam musicians with whom you may want to connect and play, view our Musicians page at: http://www.jamkazam.com/client#/musicians. +

There are currently <%= @new_musicians.size%> musicians on JamKazam with low enough latency Internet connections to you to support a good online session. To see ALL the JamKazam musicians with whom you may want to connect and play, view our Musicians page at: http://www.jamkazam.com/client#/musicians.

Best Regards,

diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb index c1d1c236a..df39c005a 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians.text.erb @@ -11,7 +11,7 @@ The following new musicians have joined JamKazam within the last week, and have <%= user.biography %> <% end %> -There are currently <%= @new_nearby.size%> musicians on JamKazam with low enough latency Internet connections to you to support a good online session. To see ALL the JamKazam musicians with whom you may want to connect and play, view our Musicians page at: http://www.jamkazam.com/client#/musicians. +There are currently <%= @new_musicians.size%> musicians on JamKazam with low enough latency Internet connections to you to support a good online session. To see ALL the JamKazam musicians with whom you may want to connect and play, view our Musicians page at: http://www.jamkazam.com/client#/musicians. Best Regards, Team JamKazam diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb index 8f16b8d7f..4eadd5311 100644 --- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb +++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb @@ -100,7 +100,7 @@ SQL self.fetch_recipients do |user, new_musicians| self.opt_in_count += 1 bset = EmailBatchSet.new_musician_set(self, user, new_musicians) - UserMailer.new_musicians(uu, new_musicians).deliver + UserMailer.new_musicians(user, new_musicians).deliver end self.sent_count = self.opt_in_count self.save diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb index e259ed865..d6dd13626 100644 --- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb +++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb @@ -54,10 +54,10 @@ describe EmailBatchNewMusician do end it 'sends email' do - pending + receiver; drummer; loser; vocalist ebatch = new_musician_batch ebatch.deliver_batch - expect(UserMailer.deliveries.length).to eq(3) + expect(UserMailer.deliveries.length).to eq(1) end end From 8d35ea09e8a12bf6048545e1f8522492c1666785 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Tue, 3 Jun 2014 04:01:48 +0000 Subject: [PATCH 08/25] VRFS-1664 added another test --- .../models/email_batch_spec_new_musicians.rb | 43 ++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb index d6dd13626..ae0e91c11 100644 --- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb +++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb @@ -15,13 +15,20 @@ describe EmailBatchNewMusician do let (:new_musician_batch) { FactoryGirl.create(:email_batch_new_musician) } - let (:receiver) { + let (:receiver1) { FactoryGirl.create(:user, :created_at => Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day), :last_jam_locidispid => 1, :last_jam_addr => 1 ) } + let (:receiver2) { + FactoryGirl.create(:user, + :created_at => Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day), + :last_jam_locidispid => 3, + :last_jam_addr => 3 + ) + } let (:drummer) { FactoryGirl.create(:user, :last_jam_locidispid => 1, @@ -38,27 +45,51 @@ describe EmailBatchNewMusician do let (:loser) { FactoryGirl.create(:user, :last_jam_locidispid => 2, :last_jam_addr => 2) } + let (:drummer3) { FactoryGirl.create(:user, + :last_jam_locidispid => 3, + :last_jam_addr => 3) } + let (:guitarist3) { FactoryGirl.create(:user, + :last_jam_locidispid => 3, + :last_jam_addr => 3) } + let (:bassist3) { FactoryGirl.create(:user, + :last_jam_locidispid => 3, + :last_jam_addr => 3) } + let (:vocalist3) { FactoryGirl.create(:user, + :last_jam_locidispid => 3, + :last_jam_addr => 3) } before(:each) do - + drummer; guitarist; bassist; vocalist; loser + drummer3; guitarist3; bassist3; vocalist3 + receiver1; receiver2 + new_musician_batch.reset! + JamRuby::Score.delete_all JamRuby::Score.createx(1, 'a', 1, 1, 'a', 1, 10) JamRuby::Score.createx(1, 'a', 1, 2, 'a', 2, Score::MAX_YELLOW_LATENCY + 1) end it 'sets up data properly' do - receiver; drummer; loser; vocalist results = new_musician_batch.fetch_recipients expect(results.count).to eq(1) user, new_musicians = results[0] - expect(user.id).to eq(receiver.id) - expect(new_musicians.count).to eq(2) + expect(user.id).to eq(receiver1.id) + expect(new_musicians.count).to eq(4) end it 'sends email' do - receiver; drummer; loser; vocalist ebatch = new_musician_batch ebatch.deliver_batch expect(UserMailer.deliveries.length).to eq(1) end + it 'handles multiple receivers' do + JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10) + results = new_musician_batch.fetch_recipients + expect(results.count).to eq(2) + user, new_musicians = results.detect { |rr| rr[0].id == receiver1.id } + expect(new_musicians.count).to eq(8) + user, new_musicians = results.detect { |rr| rr[0].id == receiver2.id } + expect(new_musicians.count).to eq(4) + end + end end From abc1044431c53600f98eeb560842375d29f90111 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Tue, 3 Jun 2014 04:03:02 +0000 Subject: [PATCH 09/25] VRFS-1664 added another test --- ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb index ae0e91c11..eb44e12c2 100644 --- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb +++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb @@ -83,6 +83,8 @@ describe EmailBatchNewMusician do it 'handles multiple receivers' do JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10) + JamRuby::Score.createx(1, 'a', 1, 4, 'a', 4, 10) + JamRuby::Score.createx(2, 'a', 2, 4, 'a', 4, 10) results = new_musician_batch.fetch_recipients expect(results.count).to eq(2) user, new_musicians = results.detect { |rr| rr[0].id == receiver1.id } From a9b67a9a6b19a0cf875939ecf25835a61290d067 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Tue, 3 Jun 2014 01:10:25 -0400 Subject: [PATCH 10/25] VRFS-1693 resque job to schedule recurring music sessions --- db/manifest | 1 + ...eduled_sessions_next_session_scheduled.sql | 1 + ruby/lib/jam_ruby/models/music_session.rb | 63 +++++++++++++++++++ .../scheduled/music_session_scheduler.rb | 39 ++++++++++++ web/config/scheduler.yml | 4 ++ 5 files changed, 108 insertions(+) create mode 100644 db/up/scheduled_sessions_next_session_scheduled.sql diff --git a/db/manifest b/db/manifest index d4b3013d5..4b526266a 100755 --- a/db/manifest +++ b/db/manifest @@ -169,3 +169,4 @@ periodic_emails.sql remember_extra_scoring_data.sql indexing_for_regions.sql latency_tester.sql +scheduled_sessions_next_session_scheduled.sql \ No newline at end of file diff --git a/db/up/scheduled_sessions_next_session_scheduled.sql b/db/up/scheduled_sessions_next_session_scheduled.sql new file mode 100644 index 000000000..ac59d437a --- /dev/null +++ b/db/up/scheduled_sessions_next_session_scheduled.sql @@ -0,0 +1 @@ +alter table music_sessions add column next_session_scheduled BOOLEAN default null; \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 53cb4450c..13b340db2 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -62,6 +62,69 @@ module JamRuby self.comments.size end + # copies all relevant info for the recurring session + def copy + + MusicSession.transaction do + # copy base music_session data + new_session = MusicSession.new + new_session.description = self.description + new_session.user_id = self.user_id + new_session.band_id = self.band_id + new_session.fan_access = self.fan_access + # TODO: confirm this logic + new_session.scheduled_start = self.scheduled_start + self.scheduled_duration + new_session.scheduled_duration = self.scheduled_duration + new_session.musician_access = self.musician_access + new_session.approval_required = self.approval_required + new_session.fan_chat = self.fan_chat + new_session.genre_id = self.genre_id + new_session.legal_policy = self.legal_policy + new_session.language = self.language + new_session.name = self.name + new_session.recurring_mode = self.recurring_mode + new_session.timezone = self.timezone + new_session.open_rsvps = self.open_rsvps + new_session.save + + # copy rsvp_slots + RsvpSlot.find_each(:conditions => "music_session_id = '#{self.id}'") do |slot| + new_slot = RsvpSlot.new + new_slot.instrument_id = slot.instrument_id + new_slot.proficiency_level = slot.proficiency_level + new_slot.music_session_id = new_session.id + new_slot.save + end + + # copy music_notations + MusicNotation.find_each(:conditions => "music_session_id = '#{self.id}'") do |notation| + new_notation = MusicNotation.new + new_notation.user_id = notation.user_id + new_notation.music_session_id = new_session.id + new_notation.file_url = notation.file_url + new_notation.size = notation.size + new_notation.save + end + + # copy invitations + Invitation.find_each(:conditions => "music_session_id = '#{self.id}'") do |invitation| + new_invitation = Invitation.new + new_invitation.sender_id = invitation.sender_id + new_invitation.receiver_id = invitation.receiver_id + new_invitation.music_session_id = new_session.id + new_invitation.save + + user = User.find(new_invitation.receiver_id) + Notification.send_scheduled_session_invitation(new_session, user) + end + + # mark the next session as scheduled + self.next_session_scheduled = true + self.save + end + + end + def grouped_tracks tracks = [] self.music_session_user_histories.each do |msuh| diff --git a/ruby/lib/jam_ruby/resque/scheduled/music_session_scheduler.rb b/ruby/lib/jam_ruby/resque/scheduled/music_session_scheduler.rb index e69de29bb..6babdd5ee 100644 --- a/ruby/lib/jam_ruby/resque/scheduled/music_session_scheduler.rb +++ b/ruby/lib/jam_ruby/resque/scheduled/music_session_scheduler.rb @@ -0,0 +1,39 @@ +require 'json' +require 'resque' +require 'resque-retry' +require 'net/http' +require 'digest/md5' + +module JamRuby + + class MusicSessionScheduler + extend Resque::Plugins::LonelyJob + + @queue = :music_session_scheduler + + @@log = Logging.logger[MusicSessionScheduler] + + def self.lock_timeout + 120 + end + + def self.perform + @@log.debug("waking up") + + JamWebEventMachine.run_wait_stop do + MusicSessionScheduler.new.run + end + + @@log.debug("done") + end + + def run + # get all weekly sessions that have ended in the last 15 minutes + criteria = "recurring_mode = 'weekly' AND session_removed_at is not null AND next_session_scheduled = false" + MusicSession.find_each(:conditions => criteria) do |music_session| + music_session.copy + end + end + + end +end \ No newline at end of file diff --git a/web/config/scheduler.yml b/web/config/scheduler.yml index 85297676e..87753a1f4 100644 --- a/web/config/scheduler.yml +++ b/web/config/scheduler.yml @@ -39,3 +39,7 @@ NewMusicianEmailer: class: "JamRuby::NewMusicianEmailer" description: "Sends weekly emails of new users with good latency" +MusicSessionScheduler: + cron: "0 */5 0 * *" + class: "JamRuby::MusicSessionScheduler" + description: "Schedules music sessions that are marked as recurring" \ No newline at end of file From d07e649c7bfd5692483accdb1d22c45a59e72643 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Wed, 4 Jun 2014 01:47:28 -0400 Subject: [PATCH 11/25] VRFS-1693 music session scheduler --- ruby/lib/jam_ruby/models/music_session.rb | 54 ++++++++++++++++++----- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 13b340db2..4395127bf 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -87,13 +87,46 @@ module JamRuby new_session.open_rsvps = self.open_rsvps new_session.save - # copy rsvp_slots + # copy rsvp_slots, rsvp_requests, and rsvp_requests_rsvp_slots RsvpSlot.find_each(:conditions => "music_session_id = '#{self.id}'") do |slot| new_slot = RsvpSlot.new new_slot.instrument_id = slot.instrument_id new_slot.proficiency_level = slot.proficiency_level new_slot.music_session_id = new_session.id new_slot.save + + # get the request for this slot that was approved (should only be ONE) + rsvp_request_slot = RsvpRequestRsvpSlot.where("chosen = true AND rsvp_slot_id = ?", slot.id).first + + unless rsvp_request_slot.nil? + rsvp = RsvpRequest.find_by_id(rsvp_request_slot.rsvp_request_id) + new_rsvp = RsvpRequest.new + new_rsvp.user_id = rsvp.user_id + new_rsvp.save + + new_rsvp_req_slot = RsvpRequestRsvpSlot.new + new_rsvp_req_slot.rsvp_request_id = new_rsvp.id + new_rsvp_req_slot.rsvp_slot_id = new_slot.id + new_rsvp_req_slot.chosen = true + new_rsvp_req_slot.save + end + + # now get any RSVPs that were 1-time cancellations and copy those + rejected_req_slots = RsvpRequestRsvpSlot.where("chosen = false AND rsvp_slot_id = ?", slot.id) + rejected_req_slots.each do |req_slot| + rsvp = RsvpRequest.find_by_id(req_slot.rsvp_request_id) + if rsvp.canceled && !rsvp.cancel_all + new_rsvp = RsvpRequest.new + new_rsvp.user_id = rsvp.user_id + new_rsvp.save + + new_rsvp_req_slot = RsvpRequestRsvpSlot.new + new_rsvp_req_slot.rsvp_request_id = new_rsvp.id + new_rsvp_req_slot.rsvp_slot_id = new_slot.id + new_rsvp_req_slot.chosen = true + new_rsvp_req_slot.save + end + end end # copy music_notations @@ -102,21 +135,22 @@ module JamRuby new_notation.user_id = notation.user_id new_notation.music_session_id = new_session.id new_notation.file_url = notation.file_url + # new_notation.file_name = notation.file_name new_notation.size = notation.size new_notation.save end # copy invitations - Invitation.find_each(:conditions => "music_session_id = '#{self.id}'") do |invitation| - new_invitation = Invitation.new - new_invitation.sender_id = invitation.sender_id - new_invitation.receiver_id = invitation.receiver_id - new_invitation.music_session_id = new_session.id - new_invitation.save + # Invitation.find_each(:conditions => "music_session_id = '#{self.id}'") do |invitation| + # new_invitation = Invitation.new + # new_invitation.sender_id = invitation.sender_id + # new_invitation.receiver_id = invitation.receiver_id + # new_invitation.music_session_id = new_session.id + # new_invitation.save - user = User.find(new_invitation.receiver_id) - Notification.send_scheduled_session_invitation(new_session, user) - end + # user = User.find(new_invitation.receiver_id) + # Notification.send_scheduled_session_invitation(new_session, user) + # end # mark the next session as scheduled self.next_session_scheduled = true From 8cc14b1ede0bfa48102628d9d977c4154d330fd6 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Wed, 4 Jun 2014 23:17:45 -0400 Subject: [PATCH 12/25] VRFS-1693 copy canceled RSVP for slot if none were chosen --- ruby/lib/jam_ruby/models/music_session.rb | 38 ++++++++++++++--------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 4395127bf..139825c5a 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -87,6 +87,8 @@ module JamRuby new_session.open_rsvps = self.open_rsvps new_session.save + chosen_slots = [] + # copy rsvp_slots, rsvp_requests, and rsvp_requests_rsvp_slots RsvpSlot.find_each(:conditions => "music_session_id = '#{self.id}'") do |slot| new_slot = RsvpSlot.new @@ -99,6 +101,8 @@ module JamRuby rsvp_request_slot = RsvpRequestRsvpSlot.where("chosen = true AND rsvp_slot_id = ?", slot.id).first unless rsvp_request_slot.nil? + chosen_slots << rsvp_request_slot + rsvp = RsvpRequest.find_by_id(rsvp_request_slot.rsvp_request_id) new_rsvp = RsvpRequest.new new_rsvp.user_id = rsvp.user_id @@ -109,22 +113,28 @@ module JamRuby new_rsvp_req_slot.rsvp_slot_id = new_slot.id new_rsvp_req_slot.chosen = true new_rsvp_req_slot.save - end - # now get any RSVPs that were 1-time cancellations and copy those - rejected_req_slots = RsvpRequestRsvpSlot.where("chosen = false AND rsvp_slot_id = ?", slot.id) - rejected_req_slots.each do |req_slot| - rsvp = RsvpRequest.find_by_id(req_slot.rsvp_request_id) - if rsvp.canceled && !rsvp.cancel_all - new_rsvp = RsvpRequest.new - new_rsvp.user_id = rsvp.user_id - new_rsvp.save + # if this slot was not chosen, try to get any RSVPs that were 1-time cancellations and copy those + else + rejected_req_slots = RsvpRequestRsvpSlot.where("(chosen = false OR chosen is null) AND rsvp_slot_id = ?", slot.id).order("created_at ASC") - new_rsvp_req_slot = RsvpRequestRsvpSlot.new - new_rsvp_req_slot.rsvp_request_id = new_rsvp.id - new_rsvp_req_slot.rsvp_slot_id = new_slot.id - new_rsvp_req_slot.chosen = true - new_rsvp_req_slot.save + rejected_req_slots.each do |req_slot| + # get RsvpRequest corresponding to this RsvpRequestRsvpSlot + rsvp = RsvpRequest.find_by_id(req_slot.rsvp_request_id) + + # if the RSVP was canceled (but all future sessions were NOT canceled), then copy this one and break + if rsvp.canceled && !rsvp.cancel_all + new_rsvp = RsvpRequest.new + new_rsvp.user_id = rsvp.user_id + new_rsvp.save + + new_rsvp_req_slot = RsvpRequestRsvpSlot.new + new_rsvp_req_slot.rsvp_request_id = new_rsvp.id + new_rsvp_req_slot.rsvp_slot_id = new_slot.id + new_rsvp_req_slot.chosen = true + new_rsvp_req_slot.save + break + end end end end From 1141f2bd2e3759ae0232c8026ee3e62ccd402ab0 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Thu, 5 Jun 2014 00:55:15 -0400 Subject: [PATCH 13/25] VRFS-1693 bug fixes --- ruby/lib/jam_ruby/models/music_session.rb | 38 ++++++----------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 139825c5a..0b1912d4b 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -73,7 +73,7 @@ module JamRuby new_session.band_id = self.band_id new_session.fan_access = self.fan_access # TODO: confirm this logic - new_session.scheduled_start = self.scheduled_start + self.scheduled_duration + # new_session.scheduled_start = self.scheduled_start + self.scheduled_duration new_session.scheduled_duration = self.scheduled_duration new_session.musician_access = self.musician_access new_session.approval_required = self.approval_required @@ -85,34 +85,26 @@ module JamRuby new_session.recurring_mode = self.recurring_mode new_session.timezone = self.timezone new_session.open_rsvps = self.open_rsvps - new_session.save - - chosen_slots = [] # copy rsvp_slots, rsvp_requests, and rsvp_requests_rsvp_slots RsvpSlot.find_each(:conditions => "music_session_id = '#{self.id}'") do |slot| new_slot = RsvpSlot.new new_slot.instrument_id = slot.instrument_id new_slot.proficiency_level = slot.proficiency_level - new_slot.music_session_id = new_session.id - new_slot.save + new_session.rsvp_slots << new_slot # get the request for this slot that was approved (should only be ONE) rsvp_request_slot = RsvpRequestRsvpSlot.where("chosen = true AND rsvp_slot_id = ?", slot.id).first unless rsvp_request_slot.nil? - chosen_slots << rsvp_request_slot - rsvp = RsvpRequest.find_by_id(rsvp_request_slot.rsvp_request_id) new_rsvp = RsvpRequest.new new_rsvp.user_id = rsvp.user_id - new_rsvp.save new_rsvp_req_slot = RsvpRequestRsvpSlot.new - new_rsvp_req_slot.rsvp_request_id = new_rsvp.id - new_rsvp_req_slot.rsvp_slot_id = new_slot.id + new_rsvp_req_slot.rsvp_request = new_rsvp + new_rsvp_req_slot.rsvp_slot = new_slot new_rsvp_req_slot.chosen = true - new_rsvp_req_slot.save # if this slot was not chosen, try to get any RSVPs that were 1-time cancellations and copy those else @@ -126,13 +118,11 @@ module JamRuby if rsvp.canceled && !rsvp.cancel_all new_rsvp = RsvpRequest.new new_rsvp.user_id = rsvp.user_id - new_rsvp.save new_rsvp_req_slot = RsvpRequestRsvpSlot.new - new_rsvp_req_slot.rsvp_request_id = new_rsvp.id - new_rsvp_req_slot.rsvp_slot_id = new_slot.id + new_rsvp_req_slot.rsvp_request = new_rsvp + new_rsvp_req_slot.rsvp_slot = new_slot new_rsvp_req_slot.chosen = true - new_rsvp_req_slot.save break end end @@ -143,24 +133,14 @@ module JamRuby MusicNotation.find_each(:conditions => "music_session_id = '#{self.id}'") do |notation| new_notation = MusicNotation.new new_notation.user_id = notation.user_id - new_notation.music_session_id = new_session.id + new_notation.music_session = new_session new_notation.file_url = notation.file_url # new_notation.file_name = notation.file_name new_notation.size = notation.size - new_notation.save + new_session.music_notations << new_notation end - # copy invitations - # Invitation.find_each(:conditions => "music_session_id = '#{self.id}'") do |invitation| - # new_invitation = Invitation.new - # new_invitation.sender_id = invitation.sender_id - # new_invitation.receiver_id = invitation.receiver_id - # new_invitation.music_session_id = new_session.id - # new_invitation.save - - # user = User.find(new_invitation.receiver_id) - # Notification.send_scheduled_session_invitation(new_session, user) - # end + new_session.save # mark the next session as scheduled self.next_session_scheduled = true From e669205c64d9d6a284a933425cee0f8cc419f12a Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Thu, 5 Jun 2014 15:42:23 +0000 Subject: [PATCH 14/25] VRFS-1664 added looping test --- .../models/email_batch_new_musician.rb | 7 +++-- .../models/email_batch_spec_new_musicians.rb | 30 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb index 4eadd5311..2ae5c4e73 100644 --- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb +++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb @@ -20,7 +20,9 @@ module JamRuby ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_NEW}") sql =< 1, :last_jam_addr => 1, + :created_at => dd) + end + 10.downto(1) do |nn| + FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) + end + JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10) + num = 0 + # User.where(["created_at < ?",dd]).order('created_at DESC').all.each {|uu| puts "#{uu.id}; #{uu.created_at}"} + receivers = [] + new_musician_batch.fetch_recipients do |uu, newm| + num += 1 + receivers << uu + # puts "#{uu.id}; #{uu.created_at}; " + # binding.pry + expect(newm.count).to eq(10) + end + dd += 1.day + # receivers.each_with_index {|rr,idx| puts "#{idx}; #{rr.created_at}; #{rr.id}"} + receivers.uniq! + expect(receivers.count).to eq(User.where(["created_at <= ?",dd]).count) + expect(num).to eq(User.where(["created_at <= ?",dd]).count) + end + end end From a65723681446323d4db662ae2aad1a4506519c09 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Thu, 5 Jun 2014 16:29:01 +0000 Subject: [PATCH 15/25] VRFS-1664 fixed large batch test --- .../models/email_batch_new_musician.rb | 40 +++++++++++++------ .../models/email_batch_spec_new_musicians.rb | 33 +++++++-------- 2 files changed, 42 insertions(+), 31 deletions(-) diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb index 2ae5c4e73..0fe70134e 100644 --- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb +++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb @@ -9,6 +9,7 @@ module JamRuby VAR_MUSICIAN_TABLE = "@MUSICIAN_TABLE" TMP_NEW = 'tmp_new_musicians' + TMP_RECEIVE = 'tmp_receivers' TMP_PAIRS = 'tmp_receivers_new_musicians' def self.subject @@ -26,14 +27,33 @@ SELECT INTO TEMP TABLE #{TMP_NEW} FROM users WHERE - musician = 't' AND - last_jam_locidispid IS NOT NULL AND + users.musician = 't' AND + users.last_jam_locidispid IS NOT NULL AND users.created_at > '#{time_since_last_batch(SINCE_DAYS)}' SQL ActiveRecord::Base.connection.execute(sql) end + # inserts eligible sessions to temp table def _fetch_eligible_receivers + ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_RECEIVE}") + sql =< Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day), + :created_at => receiver_date, :last_jam_locidispid => 1, :last_jam_addr => 1 ) } let (:receiver2) { FactoryGirl.create(:user, - :created_at => Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 1.day), + :created_at => receiver_date, :last_jam_locidispid => 3, :last_jam_addr => 3 ) @@ -68,7 +70,6 @@ describe EmailBatchNewMusician do end it 'sets up data properly' do - pending results = new_musician_batch.fetch_recipients expect(results.count).to eq(1) user, new_musicians = results[0] @@ -77,14 +78,12 @@ describe EmailBatchNewMusician do end it 'sends email' do - pending ebatch = new_musician_batch ebatch.deliver_batch expect(UserMailer.deliveries.length).to eq(1) end it 'handles multiple receivers' do - pending JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10) JamRuby::Score.createx(1, 'a', 1, 4, 'a', 4, 10) JamRuby::Score.createx(2, 'a', 2, 4, 'a', 4, 10) @@ -97,30 +96,26 @@ describe EmailBatchNewMusician do end it 'handles large batches' do - dd = Time.now - (EmailBatchNewMusician::SINCE_DAYS.days + 14.day) + dd = receiver_date + 1.day 20.downto(1) do |nn| - FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1, + FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5, :created_at => dd) end 10.downto(1) do |nn| - FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) + FactoryGirl.create(:user, :last_jam_locidispid => 6, :last_jam_addr => 6) end - JamRuby::Score.createx(1, 'a', 1, 3, 'a', 3, 10) - num = 0 - # User.where(["created_at < ?",dd]).order('created_at DESC').all.each {|uu| puts "#{uu.id}; #{uu.created_at}"} + JamRuby::Score.delete_all + JamRuby::Score.createx(5, 'a', 5, 6, 'a', 6, 10) + JamRuby::Score.createx(5, 'a', 5, 7, 'a', 7, Score::MAX_YELLOW_LATENCY + 1) + FactoryGirl.create(:user, :last_jam_locidispid => 8, :last_jam_addr => 8, :created_at => dd) + FactoryGirl.create(:user, :last_jam_locidispid => 7, :last_jam_addr => 7) + receivers = [] new_musician_batch.fetch_recipients do |uu, newm| - num += 1 receivers << uu - # puts "#{uu.id}; #{uu.created_at}; " - # binding.pry expect(newm.count).to eq(10) end - dd += 1.day - # receivers.each_with_index {|rr,idx| puts "#{idx}; #{rr.created_at}; #{rr.id}"} - receivers.uniq! - expect(receivers.count).to eq(User.where(["created_at <= ?",dd]).count) - expect(num).to eq(User.where(["created_at <= ?",dd]).count) + expect(receivers.count).to eq(User.where(["created_at <= ? AND last_jam_addr = ?",dd,5]).count) end end From 0aa98146fe6102084a392428f704e86587329cad Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Fri, 6 Jun 2014 03:56:32 +0000 Subject: [PATCH 16/25] VRFS-1664 reformatting code --- .../models/email_batch_spec_new_musicians.rb | 40 +++++-------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb index 715c6966d..86584d669 100644 --- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb +++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb @@ -32,33 +32,16 @@ describe EmailBatchNewMusician do ) } - let (:drummer) { FactoryGirl.create(:user, - :last_jam_locidispid => 1, - :last_jam_addr => 1) } - let (:guitarist) { FactoryGirl.create(:user, - :last_jam_locidispid => 1, - :last_jam_addr => 1) } - let (:bassist) { FactoryGirl.create(:user, - :last_jam_locidispid => 1, - :last_jam_addr => 1) } - let (:vocalist) { FactoryGirl.create(:user, - :last_jam_locidispid => 1, - :last_jam_addr => 1) } - let (:loser) { FactoryGirl.create(:user, - :last_jam_locidispid => 2, - :last_jam_addr => 2) } - let (:drummer3) { FactoryGirl.create(:user, - :last_jam_locidispid => 3, - :last_jam_addr => 3) } - let (:guitarist3) { FactoryGirl.create(:user, - :last_jam_locidispid => 3, - :last_jam_addr => 3) } - let (:bassist3) { FactoryGirl.create(:user, - :last_jam_locidispid => 3, - :last_jam_addr => 3) } - let (:vocalist3) { FactoryGirl.create(:user, - :last_jam_locidispid => 3, - :last_jam_addr => 3) } + let (:drummer) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } + let (:guitarist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } + let (:bassist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } + let (:vocalist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } + let (:loser) { FactoryGirl.create(:user, :last_jam_locidispid => 2, :last_jam_addr => 2) } + let (:drummer3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) } + let (:guitarist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) } + let (:bassist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) } + let (:vocalist3) { FactoryGirl.create(:user, :last_jam_locidispid => 3, :last_jam_addr => 3) } + before(:each) do drummer; guitarist; bassist; vocalist; loser drummer3; guitarist3; bassist3; vocalist3 @@ -98,8 +81,7 @@ describe EmailBatchNewMusician do it 'handles large batches' do dd = receiver_date + 1.day 20.downto(1) do |nn| - FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5, - :created_at => dd) + FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5, :created_at => dd) end 10.downto(1) do |nn| FactoryGirl.create(:user, :last_jam_locidispid => 6, :last_jam_addr => 6) From 18167e898d39cc38b81419fc77b9302ca2e8534f Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Fri, 6 Jun 2014 05:31:53 +0000 Subject: [PATCH 17/25] VRFS-1665 added large batch test --- .../models/email_batch_scheduled_sessions.rb | 13 +--- .../email_batch_spec_scheduled_session.rb | 70 ++++++++++++------- 2 files changed, 48 insertions(+), 35 deletions(-) diff --git a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb index d9c8c915e..34c5ac3a1 100644 --- a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb +++ b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb @@ -48,7 +48,7 @@ SELECT INTO TEMP TABLE #{TMP_RECIP} FROM users INNER JOIN musicians_instruments AS mi ON mi.user_id = users.id -JOIN #{TMP_SESS} ON #{TMP_SESS}.instrument_id = mi.instrument_id +INNER JOIN #{TMP_SESS} ON #{TMP_SESS}.instrument_id = mi.instrument_id WHERE users.musician = 't' AND users.subscribe_email = 't' @@ -81,18 +81,13 @@ SQL # select recipients whose score is below minimum threshold def _select_scored_recipients(offset=0) if 0 > offset - sql =< 'bass') } let (:vocals) { FactoryGirl.create(:instrument, :description => 'vocal') } - let (:drummer) { FactoryGirl.create(:user, - :last_jam_locidispid => 1, - :last_jam_addr => 1) } - let (:guitarist) { FactoryGirl.create(:user, - :last_jam_locidispid => 1, - :last_jam_addr => 1) } - let (:bassist) { FactoryGirl.create(:user, - :last_jam_locidispid => 1, - :last_jam_addr => 1) } - let (:vocalist) { FactoryGirl.create(:user, - :last_jam_locidispid => 1, - :last_jam_addr => 1) } - let (:loser) { FactoryGirl.create(:user, - :last_jam_locidispid => 2, - :last_jam_addr => 2) } + let (:drummer) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } + let (:guitarist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } + let (:bassist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } + let (:vocalist) { FactoryGirl.create(:user, :last_jam_locidispid => 1, :last_jam_addr => 1) } + let (:loser) { FactoryGirl.create(:user, :last_jam_locidispid => 2, :last_jam_addr => 2) } let (:session1) do FactoryGirl.create(:music_session, @@ -57,6 +47,7 @@ describe EmailBatchScheduledSessions do MusicianInstrument.delete_all RsvpSlot.delete_all JamRuby::Score.delete_all + scheduled_batch.reset! drummer.musician_instruments << FactoryGirl.build(:musician_instrument, user: drummer, instrument: drums, proficiency_level: 2) drummer.musician_instruments << FactoryGirl.build(:musician_instrument, user: drummer, instrument: guitar, proficiency_level: 2) @@ -75,7 +66,6 @@ describe EmailBatchScheduledSessions do FactoryGirl.create(:rsvp_slot, :instrument => drums, :music_session => session1) FactoryGirl.create(:rsvp_slot, :instrument => guitar, :music_session => session1) FactoryGirl.create(:rsvp_slot, :instrument => bass, :music_session => session1) - FactoryGirl.create(:rsvp_slot, :instrument => drums, :music_session => session2) FactoryGirl.create(:rsvp_slot, :instrument => guitar, :music_session => session2) FactoryGirl.create(:rsvp_slot, :instrument => bass, :music_session => session2) @@ -84,24 +74,54 @@ describe EmailBatchScheduledSessions do # oo = FactoryGirl.create(:rsvp_request, :user => vocalist, :rsvp_slot => oo) # oo.rsvp_request_slot.update_attributes(chosen: true) - JamRuby::Score.createx(1, 'a', 1, 1, 'a', 1, 10) - JamRuby::Score.createx(1, 'a', 1, 2, 'a', 2, Score::MAX_YELLOW_LATENCY + 1) - end - - before(:each) do end it 'sets up data properly' do + JamRuby::Score.createx(1, 'a', 1, 1, 'a', 1, 10) + JamRuby::Score.createx(1, 'a', 1, 2, 'a', 2, Score::MAX_YELLOW_LATENCY + 1) + expect(drummer.instruments.include?(drums)).to eq(true) expect(drummer.instruments.include?(guitar)).to eq(true) obj = scheduled_batch.fetch_recipients expect(obj.count).to eq(2) + + scheduled_batch.deliver_batch + expect(UserMailer.deliveries.length).to eq(2) end - it 'sends email' do - ebatch = scheduled_batch - ebatch.deliver_batch - expect(UserMailer.deliveries.length).to eq(3) + it 'handles large batches' do + creators = [] + 8.downto(1) do |nn| + creators << uu = FactoryGirl.create(:user, :last_jam_locidispid => 5, :last_jam_addr => 5) + msess = FactoryGirl.create(:music_session, + :creator => uu, + :scheduled_start => Time.now() + 2.days, + :musician_access => true, + :approval_required => false, + :created_at => Time.now - 1.hour) + FactoryGirl.create(:rsvp_slot, :instrument => drums, :music_session => msess) + FactoryGirl.create(:rsvp_slot, :instrument => guitar, :music_session => msess) + FactoryGirl.create(:rsvp_slot, :instrument => bass, :music_session => msess) + end + instruments = [drums, guitar, bass] + 4.downto(1) do |nn| + uu = FactoryGirl.create(:user, :last_jam_locidispid => 6, :last_jam_addr => 6) + uu.musician_instruments << FactoryGirl.build(:musician_instrument, + user: uu, + instrument: instruments.sample, + proficiency_level: 2) + end + JamRuby::Score.createx(5, 'a', 5, 6, 'a', 6, 10) + JamRuby::Score.createx(5, 'a', 5, 7, 'a', 7, Score::MAX_YELLOW_LATENCY + 1) + FactoryGirl.create(:user, :last_jam_locidispid => 8, :last_jam_addr => 8) + FactoryGirl.create(:user, :last_jam_locidispid => 7, :last_jam_addr => 7) + + receivers = [] + scheduled_batch.fetch_recipients(3) do |receiver, sessions| + receivers << receiver + expect(sessions.count).to eq(8) + end + expect(receivers.count).to eq(4) end end From 98ede13fbc74cafbd7d31a2b945f6213d104919e Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Fri, 6 Jun 2014 06:08:32 +0000 Subject: [PATCH 18/25] VRFS-1664 fixed typo --- ruby/lib/jam_ruby/models/email_batch_new_musician.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb index 0fe70134e..9d33bf45e 100644 --- a/ruby/lib/jam_ruby/models/email_batch_new_musician.rb +++ b/ruby/lib/jam_ruby/models/email_batch_new_musician.rb @@ -126,7 +126,7 @@ SQL def self.send_new_musician_batch oo = self.create - oo..deliver_batch + oo.deliver_batch oo end From eee0281c379a109fa3e92a7abdf580bd006994ea Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Fri, 6 Jun 2014 06:08:53 +0000 Subject: [PATCH 19/25] VRFS-1665 fixed typo --- ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb index 34c5ac3a1..8ef39a14c 100644 --- a/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb +++ b/ruby/lib/jam_ruby/models/email_batch_scheduled_sessions.rb @@ -141,7 +141,7 @@ SQL def self.send_daily_session_batch oo = self.create - oo..deliver_batch + oo.deliver_batch oo end From 2932d02894dfa89b8b27c79dbd66fb149ac816c4 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Fri, 6 Jun 2014 06:09:35 +0000 Subject: [PATCH 20/25] VRFS-1664 added periodical test --- .../jam_ruby/models/email_batch_spec_new_musicians.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb index 86584d669..7d84c9594 100644 --- a/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb +++ b/ruby/spec/jam_ruby/models/email_batch_spec_new_musicians.rb @@ -61,8 +61,12 @@ describe EmailBatchNewMusician do end it 'sends email' do - ebatch = new_musician_batch - ebatch.deliver_batch + new_musician_batch.deliver_batch + expect(UserMailer.deliveries.length).to eq(1) + end + + it 'sends email periodically' do + EmailBatchNewMusician.send_new_musician_batch expect(UserMailer.deliveries.length).to eq(1) end From 1a93b5f1f327fd439f37f7bace042d44be593673 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Fri, 6 Jun 2014 03:04:52 -0400 Subject: [PATCH 21/25] VRFS-1710 added scheduled session info to hover bubble / show session hover bubble for session-related notifications --- ruby/lib/jam_ruby/models/music_session.rb | 2 +- web/app/assets/javascripts/findSession.js | 171 ++++++++---------- web/app/assets/javascripts/hoverSession.js | 18 +- .../assets/javascripts/notificationPanel.js | 37 ++++ .../api_music_sessions/show_history.rabl | 2 +- web/app/views/clients/_hoverSession.html.erb | 9 +- web/app/views/clients/_sidebar.html.erb | 3 +- 7 files changed, 134 insertions(+), 108 deletions(-) diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 0b1912d4b..5c05a7e24 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -8,7 +8,7 @@ module JamRuby RECURRING_MODES = [NO_RECURRING, RECURRING_WEEKLY] - attr_accessor :legal_terms, :recurring_mode, :language_description, :scheduled_start_time, :access_description + attr_accessor :legal_terms, :language_description, :scheduled_start_time, :access_description self.table_name = "music_sessions" diff --git a/web/app/assets/javascripts/findSession.js b/web/app/assets/javascripts/findSession.js index e9b2dd964..0c4b81a00 100644 --- a/web/app/assets/javascripts/findSession.js +++ b/web/app/assets/javascripts/findSession.js @@ -5,19 +5,17 @@ context.JK = context.JK || {}; context.JK.FindSessionScreen = function (app) { var CATEGORY = { - INVITATION: {index: 0, id: "table#sessions-invitations"}, - FRIEND: {index: 1, id: "table#sessions-friends"}, - OTHER: {index: 2, id: "table#sessions-other"} + ACTIVE: {index: 0, id: "table#sessions-active"}, + SCHEDULED: {index: 1, id: "table#sessions-scheduled"} }; var logger = context.JK.logger; var rest = context.JK.Rest(); var sessionLatency; var sessions = {}; - var invitationSessionGroup = {}; - var friendSessionGroup = {}; - var otherSessionGroup = {}; - var sessionCounts = [0, 0, 0]; + var activeSessionGroup = {}; + var scheduledSessionGroup = {}; + var sessionCounts = [0, 0]; var sessionList; var currentQuery = defaultQuery(); var currentPage = 0; @@ -105,47 +103,33 @@ function refreshDisplay() { var priorVisible; - var INVITATION = 'div#sessions-invitations'; - var FRIEND = 'div#sessions-friends'; - var OTHER = 'div#sessions-other'; + var ACTIVE = 'div#sessions-active'; + var SCHEDULED = 'div#sessions-scheduled'; - // INVITATION - //logger.debug("sessionCounts[CATEGORY.INVITATION.index]=" + sessionCounts[CATEGORY.INVITATION.index]); - if (sessionCounts[CATEGORY.INVITATION.index] === 0) { + // ACTIVE + //logger.debug("sessionCounts[CATEGORY.ACTIVE.index]=" + sessionCounts[CATEGORY.ACTIVE.index]); + if (sessionCounts[CATEGORY.ACTIVE.index] === 0) { priorVisible = false; - $(INVITATION).hide(); + $(ACTIVE).hide(); } else { priorVisible = true; - $(INVITATION).show(); + $(ACTIVE).show(); } // FRIEND if (!priorVisible) { - $(FRIEND).removeClass('mt35'); + $(SCHEDULED).removeClass('mt35'); } - //logger.debug("sessionCounts[CATEGORY.FRIEND.index]=" + sessionCounts[CATEGORY.FRIEND.index]); - if (sessionCounts[CATEGORY.FRIEND.index] === 0) { + //logger.debug("sessionCounts[CATEGORY.SCHEDULED.index]=" + sessionCounts[CATEGORY.SCHEDULED.index]); + if (sessionCounts[CATEGORY.SCHEDULED.index] === 0) { priorVisible = false; - $(FRIEND).hide(); + $(SCHEDULED).hide(); } else { priorVisible = true; - $(FRIEND).show(); - } - - // OTHER - if (!priorVisible) { - $(OTHER).removeClass('mt35'); - } - - //logger.debug("sessionCounts[CATEGORY.OTHER.index]=" + sessionCounts[CATEGORY.OTHER.index]); - if (sessionCounts[CATEGORY.OTHER.index] === 0) { - $(OTHER).hide(); - } - else { - $(OTHER).show(); + $(SCHEDULED).show(); } } @@ -226,55 +210,55 @@ }); } - function containsInvitation(session) { - var i, invitation = null; + // function containsInvitation(session) { + // var i, invitation = null; - if (session !== undefined) { - if ("invitations" in session) { - // user has invitations for this session - for (i = 0; i < session.invitations.length; i++) { - invitation = session.invitations[i]; - // session contains an invitation for this user - if (invitation.receiver_id == context.JK.currentUserId) { - return true; - } - } - } - } + // if (session !== undefined) { + // if ("invitations" in session) { + // // user has invitations for this session + // for (i = 0; i < session.invitations.length; i++) { + // invitation = session.invitations[i]; + // // session contains an invitation for this user + // if (invitation.receiver_id == context.JK.currentUserId) { + // return true; + // } + // } + // } + // } - return false; - } + // return false; + // } - function containsFriend(session) { - var i, participant = null; + // function containsFriend(session) { + // var i, participant = null; - if (session !== undefined) { - if ("participants" in session) { - for (i = 0; i < session.participants.length; i++) { - participant = session.participants[i]; - // this session participant is a friend - if (participant !== null && participant !== undefined && participant.user.is_friend) { - return true; - } - } - } - } - return false; - } + // if (session !== undefined) { + // if ("participants" in session) { + // for (i = 0; i < session.participants.length; i++) { + // participant = session.participants[i]; + // // this session participant is a friend + // if (participant !== null && participant !== undefined && participant.user.is_friend) { + // return true; + // } + // } + // } + // } + // return false; + // } - function latencyResponse(sessionId) { - logger.debug("Received latency response for session " + sessionId); - renderSession(sessionId); - } + // function latencyResponse(sessionId) { + // logger.debug("Received latency response for session " + sessionId); + // renderSession(sessionId); + // } /** * Not used normally. Allows modular unit testing * of the renderSession method without having to do * as much heavy setup. */ - function setSession(session) { - invitationSessionGroup[session.id] = session; - } + // function setSession(session) { + // invitationSessionGroup[session.id] = session; + // } /** * Render a single session line into the table. @@ -285,16 +269,12 @@ // store session in the appropriate bucket and increment category counts var session = sessions[sessionId]; if (containsInvitation(session)) { - invitationSessionGroup[sessionId] = session; - sessionCounts[CATEGORY.INVITATION.index]++; + activeSessionGroup[sessionId] = session; + sessionCounts[CATEGORY.ACTIVE.index]++; } else if (containsFriend(session)) { - friendSessionGroup[sessionId] = session; - sessionCounts[CATEGORY.FRIEND.index]++; - } - else { - otherSessionGroup[sessionId] = session; - sessionCounts[CATEGORY.OTHER.index]++; + scheduledSessionGroup[sessionId] = session; + sessionCounts[CATEGORY.SCHEDULED.index]++; } // hack to prevent duplicate rows from being rendered when filtering @@ -303,25 +283,18 @@ logger.debug('Rendering session ID = ' + sessionId); - if (invitationSessionGroup[sessionId] != null) { - $tbGroup = $(CATEGORY.INVITATION.id); + if (activeSessionGroup[sessionId] != null) { + $tbGroup = $(CATEGORY.ACTIVE.id); - if ($("table#sessions-invitations tr[id='" + sessionId + "']").length > 0) { + if ($("table#sessions-active tr[id='" + sessionId + "']").length > 0) { sessionAlreadyRendered = true; } } - else if (friendSessionGroup[sessionId] != null) { + else if (scheduledSessionGroup[sessionId] != null) { ; - $tbGroup = $(CATEGORY.FRIEND.id); + $tbGroup = $(CATEGORY.SCHEDULED.id); - if ($("table#sessions-friends tr[id='" + sessionId + "']").length > 0) { - sessionAlreadyRendered = true; - } - } - else if (otherSessionGroup[sessionId] != null) { - $tbGroup = $(CATEGORY.OTHER.id); - - if ($("table#sessions-other tr[id='" + sessionId + "']").length > 0) { + if ($("table#sessions-scheduled tr[id='" + sessionId + "']").length > 0) { sessionAlreadyRendered = true; } } @@ -359,16 +332,14 @@ currentPage = 0; $noMoreSessions.hide(); $scroller.infinitescroll('resume'); - $('table#sessions-invitations').children(':not(:first-child)').remove(); - $('table#sessions-friends').children(':not(:first-child)').remove(); - $('table#sessions-other').children(':not(:first-child)').remove(); + $('table#sessions-active').children(':not(:first-child)').remove(); + $('table#sessions-scheduled').children(':not(:first-child)').remove(); - sessionCounts = [0, 0, 0]; + sessionCounts = [0, 0]; sessions = {}; - invitationSessionGroup = {}; - friendSessionGroup = {}; - otherSessionGroup = {}; + activeSessionGroup = {}; + scheduledSessionGroup = {}; } function deleteSession(evt) { @@ -480,7 +451,7 @@ this.afterShow = afterShow; // Following exposed for easier testing. - this.setSession = setSession; + // this.setSession = setSession; this.clearResults = clearResults; this.getCategoryEnum = getCategoryEnum; diff --git a/web/app/assets/javascripts/hoverSession.js b/web/app/assets/javascripts/hoverSession.js index 5bedf9249..19cc5b3da 100644 --- a/web/app/assets/javascripts/hoverSession.js +++ b/web/app/assets/javascripts/hoverSession.js @@ -50,14 +50,28 @@ var template = $('#template-hover-session').html(); + var sessionPageUrl = "/sessions/" + response.id; + var sessionPageLinkText = "WEB PAGE"; + + // if session hasn't begun, it must be a scheduled session so link to SESSION INFO page + if (!response.active_music_session && !response.session_removed_at) { + sessionPageUrl += "/details"; + sessionPageLinkText = "SESSION DETAILS"; + } + var sessionHtml = context.JK.fillTemplate(template, { musicSessionId: response.id, + name: response.name, description: response.description, - genre: response.genres.toUpperCase(), + genre: response.genre_id.toUpperCase(), comment_count: response.comment_count, like_count: response.like_count, created_at: $.timeago(response.created_at), - musicians: musicianHtml + musicians: musicianHtml, + url: sessionPageUrl, + externalLinkText: sessionPageLinkText, + start_time: response.scheduled_start, + recurrence: response.recurring_mode === 'weekly' ? 'Recurs weekly on this day at this time' : '' }); $(hoverSelector).append('

Session Detail

' + sessionHtml); diff --git a/web/app/assets/javascripts/notificationPanel.js b/web/app/assets/javascripts/notificationPanel.js index d136a583d..2f78c7e53 100644 --- a/web/app/assets/javascripts/notificationPanel.js +++ b/web/app/assets/javascripts/notificationPanel.js @@ -358,6 +358,43 @@ moreTextLink.hide(); } } + else if (type === context.JK.MessageType.SCHEDULED_SESSION_INVITATION) { + linkSessionInfoNotification(payload, $notification, $btnNotificationAction); + } + else if (type === context.JK.MessageType.SCHEDULED_SESSION_RSVP) { + linkSessionInfoNotification(payload, $notification, $btnNotificationAction); + } + else if (type === context.JK.MessageType.SCHEDULED_SESSION_RSVP_APPROVED) { + linkSessionInfoNotification(payload, $notification, $btnNotificationAction); + } + else if (type === context.JK.MessageType.SCHEDULED_SESSION_RSVP_CANCELLED) { + linkSessionInfoNotification(payload, $notification, $btnNotificationAction); + } + else if (type === context.JK.MessageType.SCHEDULED_SESSION_RSVP_CANCELLED_ORG) { + linkSessionInfoNotification(payload, $notification, $btnNotificationAction); + } + else if (type === context.JK.MessageType.SCHEDULED_SESSION_CANCELLED) { + linkSessionInfoNotification(payload, $notification, $btnNotificationAction); + } + else if (type === context.JK.MessageType.SCHEDULED_SESSION_RESCHEDULED) { + linkSessionInfoNotification(payload, $notification, $btnNotificationAction); + } + else if (type === context.JK.MessageType.SCHEDULED_SESSION_REMINDER) { + linkSessionInfoNotification(payload, $notification, $btnNotificationAction); + } + else if (type === context.JK.MessageType.SCHEDULED_SESSION_COMMENT) { + linkSessionInfoNotification(payload, $notification, $btnNotificationAction); + } + + context.JK.bindHoverEvents($("#sidebar-div")); + } + + function linkSessionInfoNotification(payload, $notification, $btnNotificationAction) { + var $action_btn = $notification.find($btnNotificationAction); + $action_btn.text('SESSION DETAILS'); + $action_btn.click(function() { + context.JK.popExternalLink('/sessions/' + payload.session_id + '/details'); + }); } function acceptBandInvitation(args) { diff --git a/web/app/views/api_music_sessions/show_history.rabl b/web/app/views/api_music_sessions/show_history.rabl index 3ccfcb73e..c39bf68d9 100644 --- a/web/app/views/api_music_sessions/show_history.rabl +++ b/web/app/views/api_music_sessions/show_history.rabl @@ -17,7 +17,7 @@ if !current_user else attributes :id, :music_session_id, :name, :description, :musician_access, :approval_required, :fan_access, :fan_chat, - :band_id, :user_id, :genre_id, :created_at, :like_count, :comment_count, :scheduled_start, :scheduled_duration, :language, :recurring_mode, :language_description, :scheduled_start_time, :access_description + :band_id, :user_id, :genre_id, :created_at, :like_count, :comment_count, :scheduled_start, :scheduled_duration, :language, :recurring_mode, :language_description, :scheduled_start_time, :access_description, :session_removed_at node :share_url do |history| unless history.share_token.nil? diff --git a/web/app/views/clients/_hoverSession.html.erb b/web/app/views/clients/_hoverSession.html.erb index 24af6b69a..a25d0493e 100644 --- a/web/app/views/clients/_hoverSession.html.erb +++ b/web/app/views/clients/_hoverSession.html.erb @@ -20,6 +20,7 @@
{genre}
{created_at}

+
{name}
{description}
{comment_count}     @@ -30,12 +31,16 @@ {musicians}
-

+
+ SCHEDULE:
+
Starts at {start_time}
+
{recurrence}
+


diff --git a/web/app/views/clients/_sidebar.html.erb b/web/app/views/clients/_sidebar.html.erb index 5a48671e6..fe6d75fe4 100644 --- a/web/app/views/clients/_sidebar.html.erb +++ b/web/app/views/clients/_sidebar.html.erb @@ -209,7 +209,7 @@ -