From 225a81adb98446de8fb230ea22d1cf002b4cc547 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Sun, 6 Jan 2013 15:46:48 -0500 Subject: [PATCH] VRFS-80 session history --- lib/jam_ruby.rb | 2 + lib/jam_ruby/connection_manager.rb | 4 +- lib/jam_ruby/models/music_session_history.rb | 52 +++++++++++++++++++ .../models/music_session_user_history.rb | 19 +++++++ lib/jam_ruby/models/user.rb | 11 ++++ 5 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 lib/jam_ruby/models/music_session_history.rb create mode 100644 lib/jam_ruby/models/music_session_user_history.rb diff --git a/lib/jam_ruby.rb b/lib/jam_ruby.rb index 4b0c690ec..85c6aab2e 100644 --- a/lib/jam_ruby.rb +++ b/lib/jam_ruby.rb @@ -35,6 +35,8 @@ require "jam_ruby/models/band_musician" require "jam_ruby/models/connection" require "jam_ruby/models/friendship" require "jam_ruby/models/music_session" +require "jam_ruby/models/music_session_history" +require "jam_ruby/models/music_session_user_history" require "jam_ruby/models/invitation" require "jam_ruby/models/fan_invitation" require "jam_ruby/models/friend_request" diff --git a/lib/jam_ruby/connection_manager.rb b/lib/jam_ruby/connection_manager.rb index 08831fb1e..360726691 100644 --- a/lib/jam_ruby/connection_manager.rb +++ b/lib/jam_ruby/connection_manager.rb @@ -182,7 +182,7 @@ module JamRuby if connection.errors.any? raise ActiveRecord::Rollback else - + MusicSessionUserHistory.save(music_session_id, user_id, client_id) end end @@ -212,7 +212,7 @@ module JamRuby end begin - # we include user_id in the query as an act o security, so that a user can't access someone else' client connection + # we include user_id in the query as an act of security, so that a user can't access someone else's client connection conn.exec("UPDATE connections SET music_session_id = $1, as_musician = $2 WHERE client_id = $3 and user_id = $4", [music_session_id, as_musician, client_id, user_id]) do |result| if result.cmd_tuples == 1 @log.debug "associated music_session with connection for client=#{client_id}, music_session=#{music_session_id}, and user=#{user_id}" diff --git a/lib/jam_ruby/models/music_session_history.rb b/lib/jam_ruby/models/music_session_history.rb new file mode 100644 index 000000000..c70d58692 --- /dev/null +++ b/lib/jam_ruby/models/music_session_history.rb @@ -0,0 +1,52 @@ +module JamRuby + class MusicSessionHistory < ActiveRecord::Base + + self.table_name = "music_sessions_history" + + self.primary_key = 'id' + + has_many :music_session_user_histories, :class_name => "JamRuby::MusicSessionUserHistory", :foreign_key => "music_session_id" + + def self.index(current_user, user_id, band_id = nil, genre = nil) + hide_private = false + if current_user.id != user_id + hide_private = false # TODO: change to true once public flag exists + end + + query = MusicSessionHistory + .joins( + %Q{ + LEFT OUTER JOIN + music_sessions_user_history + ON + music_sessions_history.music_session_id = music_sessions_user_history.music_session_id + } + ) + .where( + %Q{ + music_sessions_history.user_id = '#{user_id}' + } + ) + + #query = query.where("public = false") unless !hide_private + query = query.where("music_sessions_history.band_id = '#{band_id}") unless band_id.nil? + query = query.where("music_sessions_history.genres like '%#{genre}%'") unless genre.nil? + return query + end + + def self.save(music_session) + session_history = MusicSessionHistory.find_by_music_session_id(music_session.id) + + if session_history.nil? + session_history = MusicSessionHistory.new() + end + + session_history.music_session_id = music_session.id + 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.save + end + end +end \ No newline at end of file diff --git a/lib/jam_ruby/models/music_session_user_history.rb b/lib/jam_ruby/models/music_session_user_history.rb new file mode 100644 index 000000000..5517e6f0f --- /dev/null +++ b/lib/jam_ruby/models/music_session_user_history.rb @@ -0,0 +1,19 @@ +module JamRuby + class MusicSessionUserHistory < ActiveRecord::Base + + self.table_name = "music_sessions_user_history" + + 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" + + def self.save(music_session_id, user_id, client_id) + session_user_history = MusicSessionUserHistory.new() + session_user_history.music_session_id = music_session_id + session_user_history.user_id = user_id + session_user_history.client_id = client_id + session_user_history.save + end + end +end \ No newline at end of file diff --git a/lib/jam_ruby/models/user.rb b/lib/jam_ruby/models/user.rb index 8e6b3444b..dc430d793 100644 --- a/lib/jam_ruby/models/user.rb +++ b/lib/jam_ruby/models/user.rb @@ -78,6 +78,9 @@ module JamRuby has_many :received_band_invitations, :inverse_of => :receiver, :foreign_key => "user_id", :class_name => "JamRuby::BandInvitation" 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" + # This causes the authenticate method to be generated (among other stuff) has_secure_password @@ -166,6 +169,14 @@ module JamRuby end end + def session_history(user_id, band_id = nil, genre = nil) + return MusicSessionHistory.index(self, user_id, band_id, genre) + end + + def session_user_history(user_id, session_id) + return MusicSessionUserHistory.where("music_session_id='#{session_id}'") + end + def to_s return email unless email.nil?