From 4cc679becd0fb3b7cf6c242f2044840b524f69e1 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Tue, 30 Jul 2013 12:26:26 -0500 Subject: [PATCH] vrfs-268: tweaking music_session_*history associations; added life cycle end for music_session_user_history --- lib/jam_ruby/connection_manager.rb | 3 +- lib/jam_ruby/models/band.rb | 1 + lib/jam_ruby/models/music_session_history.rb | 41 ++++++++++++++++++- .../models/music_session_perf_data.rb | 8 +++- .../models/music_session_user_history.rb | 39 ++++++++++++++++-- lib/jam_ruby/models/user.rb | 4 +- 6 files changed, 86 insertions(+), 10 deletions(-) diff --git a/lib/jam_ruby/connection_manager.rb b/lib/jam_ruby/connection_manager.rb index f400c780d..87ffc4016 100644 --- a/lib/jam_ruby/connection_manager.rb +++ b/lib/jam_ruby/connection_manager.rb @@ -329,9 +329,10 @@ SQL if result.cmd_tuples == 1 @log.debug("disassociated music_session with connection for client_id=#{client_id}, user_id=#{user_id}") + JamRuby::MusicSessionUserHistory.removed_music_session(user_id, music_session_id) session_checks(conn, previous_music_session_id, user_id) - Notification.send_musician_session_depart(music_session, connection, user) + elsif result.cmd_tuples == 0 @log.debug "leave_music_session no connection found with client_id=#{client_id}" raise ActiveRecord::RecordNotFound diff --git a/lib/jam_ruby/models/band.rb b/lib/jam_ruby/models/band.rb index 011e4b599..05f0d4645 100644 --- a/lib/jam_ruby/models/band.rb +++ b/lib/jam_ruby/models/band.rb @@ -32,6 +32,7 @@ module JamRuby # music_sessions has_many :music_sessions, :class_name => "JamRuby::MusicSession", :foreign_key => "band_id" + has_many :music_session_history, :class_name => "JamRuby::MusicSessionHistory", :foreign_key => "band_id", :inverse_of => :band def liker_count return self.likers.size diff --git a/lib/jam_ruby/models/music_session_history.rb b/lib/jam_ruby/models/music_session_history.rb index 65e319984..fe8e7d082 100644 --- a/lib/jam_ruby/models/music_session_history.rb +++ b/lib/jam_ruby/models/music_session_history.rb @@ -5,7 +5,34 @@ module JamRuby self.primary_key = 'id' - has_many :music_session_user_histories, :class_name => "JamRuby::MusicSessionUserHistory", :foreign_key => "music_session_id" + # for some reason the association is not working, i suspect has to do with the foreign key + def music_session_user_histories + @msuh ||= JamRuby::MusicSessionUserHistory + .where(:music_session_id => self.music_session_id) + .order('created_at DESC') + end + # has_many(:music_session_user_histories, + # :class_name => "JamRuby::MusicSessionUserHistory", + # :foreign_key => :music_session_id, + # :order => 'created_at DESC', + # :inverse_of => :music_session_history) + + has_one(:perf_data, + :class_name => "JamRuby::MusicSessionPerfData", + :foreign_key => "music_session_id", + :inverse_of => :music_session) + + belongs_to(:user, + :class_name => 'JamRuby::User', + :foreign_key => :user_id, + :inverse_of => :music_session_histories) + + belongs_to(:band, + :class_name => 'JamRuby::Band', + :foreign_key => :band_id, + :inverse_of => :music_session_history) + + GENRE_SEPARATOR = '|' def self.index(current_user, user_id, band_id = nil, genre = nil) hide_private = false @@ -53,7 +80,7 @@ module JamRuby session_history.description = music_session.description unless music_session.description.nil? session_history.user_id = music_session.creator.id session_history.band_id = music_session.band.id unless music_session.band.nil? - session_history.genres = music_session.genres.map { |g| g.id }.join '|' + session_history.genres = music_session.genres.map { |g| g.id }.join GENRE_SEPARATOR session_history.save! end @@ -64,6 +91,16 @@ module JamRuby .limit(1) .first hist.update_attribute(:session_removed_at, Time.now) if hist + JamRuby::MusicSessionUserHistory.removed_music_session(user_id, session_id) + end + + def duration_minutes + end_time = self.session_removed_at || Time.now + (end_time - self.created_at) / 60.0 + end + + def perf_uri + self.perf_data.try(:uri) end end diff --git a/lib/jam_ruby/models/music_session_perf_data.rb b/lib/jam_ruby/models/music_session_perf_data.rb index 16ce5e3bb..1133cb28e 100644 --- a/lib/jam_ruby/models/music_session_perf_data.rb +++ b/lib/jam_ruby/models/music_session_perf_data.rb @@ -7,9 +7,12 @@ module JamRuby attr_accessible :uri - belongs_to :music_session, :class_name => "JamRuby::MusicSessionHistory" + belongs_to(:music_session, + :class_name => "JamRuby::MusicSessionHistory", + :foreign_key => :music_session_id, + :inverse_of => :perf_data) - #mount_uploader :uri, PerfDataUploader + # mount_uploader :uri, PerfDataUploader validates :music_session, :presence => true validates :client_id, :presence => true @@ -21,4 +24,5 @@ module JamRuby self.uri = "perf_data/#{self.music_session_id}/#{self.client_id}-#{self.created_at.to_i}" end end + end diff --git a/lib/jam_ruby/models/music_session_user_history.rb b/lib/jam_ruby/models/music_session_user_history.rb index 5517e6f0f..f4de39dc1 100644 --- a/lib/jam_ruby/models/music_session_user_history.rb +++ b/lib/jam_ruby/models/music_session_user_history.rb @@ -5,8 +5,22 @@ module JamRuby self.primary_key = 'id' - has_many :users, :foreign_key => "user_id", :class_name => "JamRuby::User" - belongs_to :musician_session_history, :class_name => "JamRuby::MusicSessionHistory", :foreign_key => "music_session_id" + belongs_to(:user, + :class_name => "JamRuby::User", + :foreign_key => "user_id", + :inverse_of => :music_session_user_histories) + + # for some reason the association is not working, i suspect has to do with the foreign key + def music_session_history + @msh ||= JamRuby::MusicSessionHistory + .where(:music_session_id => self.music_session_id) + .limit(1) + .first + end + # belongs_to(:music_session_history, + # :class_name => "JamRuby::MusicSessionHistory", + # :foreign_key => :music_session_id, + # :inverse_of => :music_session_user_histories) def self.save(music_session_id, user_id, client_id) session_user_history = MusicSessionUserHistory.new() @@ -15,5 +29,24 @@ module JamRuby session_user_history.client_id = client_id session_user_history.save end + + def user_email + self.user ? self.user.email : '' + end + + def duration_minutes + end_time = self.session_removed_at || Time.now + (end_time - self.created_at) / 60.0 + end + + def self.removed_music_session(user_id, session_id) + hist = self + .where(:user_id => user_id) + .where(:music_session_id => session_id) + .limit(1) + .first + hist.update_attribute(:session_removed_at, Time.now) if hist + end + end -end \ No newline at end of file +end diff --git a/lib/jam_ruby/models/user.rb b/lib/jam_ruby/models/user.rb index f7ba3e803..025decdf2 100644 --- a/lib/jam_ruby/models/user.rb +++ b/lib/jam_ruby/models/user.rb @@ -93,8 +93,8 @@ module JamRuby has_many :sent_band_invitations, :inverse_of => :sender, :foreign_key => "creator_id", :class_name => "JamRuby::BandInvitation" # session history - has_many :music_session_histories, :foreign_key => "user_id", :class_name => "JamRuby::MusicSessionHistory" - has_many :music_session_user_histories, :foreign_key => "user_id", :class_name => "JamRuby::MusicSessionUserHistory" + has_many :music_session_histories, :foreign_key => "user_id", :class_name => "JamRuby::MusicSessionHistory", :inverse_of => :user + has_many :music_session_user_histories, :foreign_key => "user_id", :class_name => "JamRuby::MusicSessionUserHistory", :inverse_of => :user # saved tracks has_many :recorded_tracks, :foreign_key => "user_id", :class_name => "JamRuby::RecordedTrack", :inverse_of => :user