* VRFS-61 and VRFS-34; session.tracks and instrument listing
This commit is contained in:
parent
be39434e1c
commit
5657bebab8
|
|
@ -19,6 +19,7 @@ require "jam_ruby/models/music_session"
|
|||
require "jam_ruby/models/invitation"
|
||||
require "jam_ruby/models/friend_request"
|
||||
require "jam_ruby/models/instrument"
|
||||
require "jam_ruby/models/connection_track"
|
||||
require "jam_ruby/models/musician_instrument"
|
||||
require "jam_ruby/models/band_musician"
|
||||
|
||||
|
|
|
|||
|
|
@ -90,6 +90,12 @@
|
|||
return Jampb::ClientMessage.new(:type => ClientMessage::Type::USER_JOINED_MUSIC_SESSION, :route_to => CLIENT_TARGET, :user_joined_music_session => joined)
|
||||
end
|
||||
|
||||
# create a user-joined session message
|
||||
def user_left_music_session(session_id, user_id, username)
|
||||
left = Jampb::UserLeftMusicSession.new(:session_id => session_id, :user_id => user_id, :username => username)
|
||||
return Jampb::ClientMessage.new(:type => ClientMessage::Type::USER_LEFT_MUSIC_SESSION, :route_to => CLIENT_TARGET, :user_left_music_session => left)
|
||||
end
|
||||
|
||||
# create a test message to send in session
|
||||
def test_session_message(session_id, msg)
|
||||
test = Jampb::TestSessionMessage.new(:msg => msg)
|
||||
|
|
|
|||
|
|
@ -1,15 +1,28 @@
|
|||
module JamRuby
|
||||
class Connection < ActiveRecord::Base
|
||||
|
||||
SELECT_AT_LEAST_ONE = "Please select at least one track"
|
||||
|
||||
self.primary_key = 'id'
|
||||
|
||||
belongs_to :user, :class_name => "JamRuby::User"
|
||||
belongs_to :music_session, :class_name => "JamRuby::MusicSession"
|
||||
has_many :connection_tracks, :class_name => "JamRuby::ConnectionTrack", :inverse_of => :connection
|
||||
|
||||
after_save :require_at_least_one_track_when_in_session
|
||||
|
||||
# decides if a given user can access this client with p2p messaging
|
||||
# the answer is yes if the user is in the same music session
|
||||
def access_p2p?(user)
|
||||
return self.music_session.users.exists?(user)
|
||||
end
|
||||
|
||||
private
|
||||
def require_at_least_one_track_when_in_session
|
||||
if connection_tracks.count == 0
|
||||
errors.add(:genres, SELECT_AT_LEAST_ONE)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
@ -6,9 +6,9 @@ module JamRuby
|
|||
# users
|
||||
has_many :musician_instruments
|
||||
has_many :users, :through => :musician_instruments, :class_name => "JamRuby::User"
|
||||
has_many :connection_tracks, :class_name => "JamRuby::ConnectionTrack", :inverse_of => :instrument
|
||||
|
||||
# music sessions
|
||||
has_and_belongs_to_many :music_sessions, :class_name => "JamRuby::MusicSession", :join_table => "genres_music_sessions"
|
||||
|
||||
end
|
||||
end
|
||||
|
|
@ -14,34 +14,8 @@ module JamRuby
|
|||
after_save :require_at_least_one_genre, :limit_to_three_genres
|
||||
|
||||
def self.index(current_user)
|
||||
#SELECT "music_sessions"."id" AS t0_r0, "music_sessions"."description" AS t0_r1, "music_sessions"."user_id" AS t0_r2, "music_sessions"."created_at" AS t0_r3, "music_sessions"."updated_at" AS t0_r4, "music_sessions"."musician_access" AS t0_r5, "invitations"."id" AS t1_r0, "invitations"."sender_id" AS t1_r1, "invitations"."receiver_id" AS t1_r2, "invitations"."music_session_id" AS t1_r3, "invitations"."created_at" AS t1_r4, "invitations"."updated_at" AS t1_r5, "connections"."id" AS t2_r0, "connections"."user_id" AS t2_r1, "connections"."client_id" AS t2_r2, "connections"."created_at" AS t2_r3, "connections"."updated_at" AS t2_r4, "connections"."music_session_id" AS t2_r5, "connections"."ip_address" AS t2_r6, "users"."id" AS t3_r0, "users"."name" AS t3_r1, "users"."email" AS t3_r2, "users"."remember_token" AS t3_r3, "users"."password_digest" AS t3_r4, "users"."admin" AS t3_r5, "users"."created_at" AS t3_r6, "users"."updated_at" AS t3_r7, "friendships"."id" AS t4_r0, "friendships"."user_id" AS t4_r1, "friendships"."friend_id" AS t4_r2, "friendships"."created_at" AS t4_r3, "friendships"."updated_at" AS t4_r4 FROM "music_sessions" LEFT OUTER JOIN "invitations" ON "invitations"."music_session_id" = "music_sessions"."id" LEFT OUTER JOIN "connections" ON "connections"."music_session_id" = "music_sessions"."id" LEFT OUTER JOIN "users" ON "users"."id" = "connections"."user_id" LEFT OUTER JOIN "friendships" ON "friendships"."user_id" = "users"."id" WHERE (musician_access = true OR invitations.receiver_id = '1' OR friendships.friend_id = '1') ORDER BY (invitations.id is NULL) ASC, (friendships.id is NULL) ASC, music_sessions.created_at DESC
|
||||
|
||||
return MusicSession.includes(:invitations, :connections => [:user => [:friendships]]).order("(invitations.id is NULL) ASC, (friendships.friend_id != '#{current_user.id}' OR friendships.friend_id is NULL) ASC, music_sessions.created_at DESC").where("invitations.receiver_id = '#{current_user.id}' OR (friendships.friend_id = '#{current_user.id}') OR musician_access = true")
|
||||
#.select(["music_sessions.*", "(friendships.friend_id is not NULL) as is_friend"])
|
||||
#select(["music_sessions.*", "distinct(music_sessions.id)"])
|
||||
#return MusicSession.joins("LEFT OUTER JOIN invitations ON invitations.music_session_id = music_sessions.id LEFT OUTER JOIN connections ON connections.music_session_id = music_sessions.id LEFT OUTER JOIN users ON users.id = connections.user_id LEFT OUTER JOIN friendships ON friendships.user_id = users.id").order('(invitations.id is NULL) ASC, (friendships.id is NULL) ASC, music_sessions.created_at DESC').where("musician_access = true OR invitations.receiver_id = '#{current_user.id}' OR friendships.friend_id = '#{current_user.id}'")
|
||||
end
|
||||
|
||||
def list(musician_access, invited, friends, page)
|
||||
|
||||
query = MusicSession
|
||||
|
||||
unless musician_access
|
||||
query = query.unscoped
|
||||
end
|
||||
|
||||
query = query.joins('LEFT OUTER JOIN connections ON music_sessions.id = connections.music_session_id')
|
||||
|
||||
if invited
|
||||
query = query.joins("LEFT OUTER JOIN invitations ON invitations.receiver_id = ")
|
||||
end
|
||||
|
||||
if friends
|
||||
query = query.unscoped.joins("LEFT OUTER JOIN friendships ON friend_id.receiver_id = '" + current_user.id + "'")
|
||||
end
|
||||
|
||||
return query.paginate(page: page)
|
||||
end
|
||||
end
|
||||
|
||||
# Verifies that the specified user can join this music session
|
||||
def can_join? user
|
||||
|
|
@ -69,7 +43,6 @@ module JamRuby
|
|||
return self.creator == user
|
||||
end
|
||||
|
||||
|
||||
def access? user
|
||||
return self.users.exists? user
|
||||
end
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ module JamRuby
|
|||
has_many :created_music_sessions, :foreign_key => "user_id", :inverse_of => :user, :class_name => "JamRuby::MusicSession" # sessions *created* by the user
|
||||
has_many :music_sessions, :through => :connections, :class_name => "JamRuby::MusicSession"
|
||||
|
||||
# invitations
|
||||
has_many :received_invitations, :foreign_key => "receiver_id", :inverse_of => :receiver, :class_name => "JamRuby::Invitation"
|
||||
has_many :sent_invitations, :foreign_key => "sender_id", :inverse_of => :sender, :class_name => "JamRuby::Invitation"
|
||||
|
||||
|
|
@ -91,6 +92,6 @@ module JamRuby
|
|||
private
|
||||
def create_remember_token
|
||||
self.remember_token = SecureRandom.urlsafe_base64
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ class MQRouter
|
|||
end
|
||||
|
||||
if !music_session.access? user
|
||||
raise PermissionError, 'not allowed to access the specified session'
|
||||
raise PermissionError, 'not allowed to join the specified session'
|
||||
end
|
||||
|
||||
return music_session
|
||||
|
|
@ -37,6 +37,15 @@ class MQRouter
|
|||
publish_to_session(music_session.id, client_ids, client_msg.to_s, sender)
|
||||
end
|
||||
|
||||
# sends a message to a session from the server
|
||||
# no access check as with user_publish_to_session
|
||||
# client_msg should be a well-structure message (jam-pb message)
|
||||
def server_publish_to_session(music_session, client_msg, sender = {:client_id => ""})
|
||||
# gather up client_ids in the session
|
||||
client_ids = music_session.connections.map { |client| client.client_id }.reject { |client_id| client_id == sender[:client_id] }
|
||||
|
||||
publish_to_session(music_session.id, client_ids, client_msg.to_s, sender)
|
||||
end
|
||||
|
||||
# sends a message to a client with no checking of permissions (RAW USAGE)
|
||||
# this method deliberately has no database interactivity/active_record objects
|
||||
|
|
|
|||
|
|
@ -149,9 +149,6 @@ describe MusicSession do
|
|||
music_session4.save
|
||||
|
||||
music_sessions = MusicSession.index(user2)
|
||||
music_sessions.each do |s|
|
||||
p s
|
||||
end
|
||||
music_sessions.length.should == 4
|
||||
music_sessions[0].id.should == music_session.id
|
||||
music_sessions[1].id.should == music_session3.id
|
||||
|
|
|
|||
Loading…
Reference in New Issue