diff --git a/ruby/lib/jam_ruby/models/search.rb b/ruby/lib/jam_ruby/models/search.rb index eab56e42c..994edaf99 100644 --- a/ruby/lib/jam_ruby/models/search.rb +++ b/ruby/lib/jam_ruby/models/search.rb @@ -51,7 +51,7 @@ module JamRuby case ordering = self.musician_order_param(params) when :plays when :followed - sel_str = "COUNT(follows) AS follow_count, #{sel_str}" + sel_str = "COUNT(follows) AS search_follow_count, #{sel_str}" rel = rel.joins("LEFT JOIN users_followers AS follows ON follows.user_id = users.id") rel = rel.group("users.id") rel = rel.order("COUNT(follows) DESC, users.created_at DESC") @@ -59,7 +59,11 @@ module JamRuby end rel = rel.joins("LEFT JOIN friendships AS friends ON friends.user_id = users.id") - sel_str = "#{sel_str}, COUNT(friends) AS friend_count" + sel_str = "#{sel_str}, COUNT(friends) AS search_friend_count" + rel = rel.joins("LEFT JOIN recordings AS records ON records.owner_id = users.id") + sel_str = "#{sel_str}, COUNT(records) AS search_recording_count" + rel = rel.joins("LEFT JOIN music_sessions AS sessions ON sessions.user_id = users.id") + sel_str = "#{sel_str}, COUNT(sessions) AS search_session_count" rel = rel.select(sel_str) perpage = params[:per_page] || M_PER_PAGE diff --git a/ruby/spec/jam_ruby/models/musician_search_spec.rb b/ruby/spec/jam_ruby/models/musician_search_spec.rb index 9273df929..576af01ec 100644 --- a/ruby/spec/jam_ruby/models/musician_search_spec.rb +++ b/ruby/spec/jam_ruby/models/musician_search_spec.rb @@ -55,7 +55,7 @@ describe User do results = Search.musician_search(params) results.musicians.count.should == 2 - results.musicians[0].follow_count.to_i.should_not == 0 + results.musicians[0].search_follow_count.to_i.should_not == 0 end it "should have friends counter " do @@ -63,7 +63,36 @@ describe User do results = Search.musician_search friend = results.musicians.detect { |mm| mm.id == @user1.id } friend.should_not == nil - friend.friend_count.should == 1 + friend.search_friend_count.to_i.should == 1 + end + + it "should have recording counter " do + connection = FactoryGirl.create(:connection, :user => @user1) + instrument = FactoryGirl.create(:instrument, :description => 'a great instrument') + track = FactoryGirl.create(:track, :connection => connection, :instrument => instrument) + music_session = FactoryGirl.create(:music_session, :creator => @user1, :musician_access => true) + music_session.connections << connection + music_session.save + recording = Recording.start(music_session.id, @user1) + recording.stop + recording.reload + genre = FactoryGirl.create(:genre) + recording.claim(@user1, "name", genre, true, true) + recording.reload + recording.users.length.should == 1 + recording.users.first.should == @user1 + @user1.reload + @user1.recordings.length.should == 1 + @user1.recordings.first.should == recording + recording.claimed_recordings.length.should == 1 + @user1.recordings.detect { |rr| rr == recording }.should_not be nil + + results = Search.musician_search + uu = results.musicians.detect { |mm| mm.id == @user1.id } + uu.should_not == nil + + uu.search_recording_count.to_i.should == 1 + uu.search_session_count.to_i.should == 1 end it "should find all musicians sorted by plays " do diff --git a/web/app/assets/javascripts/findMusician.js b/web/app/assets/javascripts/findMusician.js index db6f30ed0..8b3ad8b63 100644 --- a/web/app/assets/javascripts/findMusician.js +++ b/web/app/assets/javascripts/findMusician.js @@ -123,8 +123,10 @@ musician_location: mm.city + ', ' + mm.state, instruments: instr_logos, biography: mm['biography'], - follow_count: mm['follow_count'], - friend_count: mm['friend_count'], + follow_count: mm['search_follow_count'], + friend_count: mm['search_friend_count'], + recording_count: mm['search_recording_count'], + session_count: mm['search_session_count'], musician_follow_template: follows }; renderings += context.JK.fillTemplate(mTemplate, mVals); diff --git a/web/app/views/api_search/index.rabl b/web/app/views/api_search/index.rabl index 2d4b04684..0df188af6 100644 --- a/web/app/views/api_search/index.rabl +++ b/web/app/views/api_search/index.rabl @@ -24,8 +24,10 @@ unless @search.musicians.nil? || @search.musicians.size == 0 node :name do |uu| uu.following.name end end - node :follow_count do |musician| musician.follow_count end - node :friend_count do |musician| musician.friend_count end + node :follow_count do |musician| musician.search_follow_count.to_i rescue 0 end + node :friend_count do |musician| musician.search_friend_count.to_i rescue 0 end + node :recording_count do |musician| musician.search_recording_count.to_i rescue 0 end + node :session_count do |musician| musician.search_session_count.to_i rescue 0 end } end diff --git a/web/app/views/clients/_musicians.html.erb b/web/app/views/clients/_musicians.html.erb index 9818fbb56..dc8974dcc 100644 --- a/web/app/views/clients/_musicians.html.erb +++ b/web/app/views/clients/_musicians.html.erb @@ -42,7 +42,7 @@ {instruments}

- {follow_count}    4    17    64

+ {friend_count}    {follow_count}    {recording_count}    {session_count}


diff --git a/web/lib/tasks/sample_data.rake b/web/lib/tasks/sample_data.rake index 0d10b91b7..52a12a1e0 100644 --- a/web/lib/tasks/sample_data.rake +++ b/web/lib/tasks/sample_data.rake @@ -10,6 +10,10 @@ namespace :db do make_followings end + task populate_friends: :environment do + make_friends + end + desc "Fill database with music session sample data" task populate_music_sessions: :environment do make_users(10) if 14 > User.count @@ -118,4 +122,13 @@ def make_followings uuu.followings << uu end end +end + +def make_friends + users = User.all + users[6..-1].each do |uu| + users[0..5].shuffle.each do |uuu| + Friendship.save(uu.id, uuu.id) + end + end end \ No newline at end of file diff --git a/web/spec/requests/musician_search_api_spec.rb b/web/spec/requests/musician_search_api_spec.rb index 36f11122c..1733e79c8 100644 --- a/web/spec/requests/musician_search_api_spec.rb +++ b/web/spec/requests/musician_search_api_spec.rb @@ -82,9 +82,13 @@ describe "Musician Search API", :type => :api do musician["id"].should == @user4.id followings= musician['followings'] followings.length.should == 3 + musician['follow_count'].to_i.should > 0 friend = response['musicians'].detect { |mm| mm['id'] == @user1.id } friend['friend_count'].should == 1 + + musician['recording_count'].should == 0 + musician['session_count'].should == 0 end end end