vrfs-884: got band filter specs to work
This commit is contained in:
parent
4c804d2f94
commit
380e264a9a
|
|
@ -36,6 +36,9 @@ module JamRuby
|
|||
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
|
||||
|
||||
include Geokit::ActsAsMappable::Glue unless defined?(acts_as_mappable)
|
||||
acts_as_mappable
|
||||
|
||||
def liker_count
|
||||
return self.likers.size
|
||||
end
|
||||
|
|
|
|||
|
|
@ -133,9 +133,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
rel = rel.select(sel_str)
|
||||
perpage = [(params[:per_page] || M_PER_PAGE).to_i, 100].min
|
||||
page = [params[:page].to_i, 1].max
|
||||
rel = rel.paginate(:page => page, :per_page => perpage)
|
||||
rel, page = self.relation_pagination(rel, params)
|
||||
rel = rel.includes([:instruments, :followings, :friends])
|
||||
|
||||
objs = rel.all
|
||||
|
|
@ -144,6 +142,12 @@ module JamRuby
|
|||
srch.musician_results_for_user(objs, current_user)
|
||||
end
|
||||
|
||||
def self.relation_pagination(rel, params)
|
||||
perpage = [(params[:per_page] || M_PER_PAGE).to_i, 100].min
|
||||
page = [params[:page].to_i, 1].max
|
||||
[rel.paginate(:page => page, :per_page => perpage), page]
|
||||
end
|
||||
|
||||
RESULT_FOLLOW = :follows
|
||||
RESULT_FRIEND = :friends
|
||||
|
||||
|
|
@ -243,10 +247,9 @@ module JamRuby
|
|||
|
||||
def self.band_search(params={}, current_user=nil)
|
||||
rel = Band.scoped
|
||||
# rel = Arel::Table.new(:bands)
|
||||
|
||||
unless (genre = params[:genre]).blank?
|
||||
rel = Band.joins("RIGHT JOIN band_genres AS bgenres ON bgenres.band_id = bands.id")
|
||||
rel = Band.joins("RIGHT JOIN bands_genres AS bgenres ON bgenres.band_id = bands.id")
|
||||
.where(['bgenres.genre_id = ? AND bands.id IS NOT NULL', genre])
|
||||
end
|
||||
|
||||
|
|
@ -256,26 +259,23 @@ module JamRuby
|
|||
case ordering = self.order_param(params)
|
||||
when :plays # FIXME: double counting?
|
||||
sel_str = "COUNT(records)+COUNT(sessions) AS play_count, #{sel_str}"
|
||||
rel = rel.joins("LEFT JOIN music_sessions AS sessions ON sessions.user_id = users.id")
|
||||
.joins("LEFT JOIN recordings AS records ON records.owner_id = users.id")
|
||||
.group("users.id")
|
||||
.order("play_count DESC, users.created_at DESC")
|
||||
rel = rel.joins("LEFT JOIN music_sessions AS sessions ON sessions.band_id = bands.id")
|
||||
.joins("LEFT JOIN recordings AS records ON records.band_id = bands.id")
|
||||
.group("bands.id")
|
||||
.order("play_count DESC, bands.created_at DESC")
|
||||
when :followed
|
||||
sel_str = "COUNT(follows) AS search_follow_count, #{sel_str}"
|
||||
rel = rel.joins("LEFT JOIN bands_followers AS follows ON follows.band_id = bands.id")
|
||||
.group("bands.id")
|
||||
.order("COUNT(follows) DESC, bands.created_at DESC")
|
||||
when :playing
|
||||
rel = rel.joins("LEFT JOIN connections ON connections.user_id = users.id")
|
||||
.where(['connections.music_session_id IS NOT NULL AND connections.aasm_state != ?',
|
||||
'expired'])
|
||||
.order("users.created_at DESC")
|
||||
rel = rel.joins("LEFT JOIN music_sessions_history AS msh ON msh.band_id = bands.id")
|
||||
.where('msh.music_session_id IS NOT NULL AND msh.session_removed_at IS NULL')
|
||||
.order("bands.created_at DESC")
|
||||
end
|
||||
|
||||
rel = rel.select(sel_str)
|
||||
perpage = [(params[:per_page] || M_PER_PAGE).to_i, 100].min
|
||||
page = [params[:page].to_i, 1].max
|
||||
rel = rel.paginate(:page => page, :per_page => perpage)
|
||||
rel, page = self.relation_pagination(rel, params)
|
||||
rel = rel.includes([:users])
|
||||
|
||||
objs = rel.all
|
||||
|
|
@ -294,8 +294,8 @@ module JamRuby
|
|||
results.each do |bb|
|
||||
counters = { }
|
||||
counters[COUNT_FOLLOW] = BandFollowing.where(:band_id => bb.id).count
|
||||
# counters[COUNT_RECORD] = ClaimedRecording.where(:band_id => bb.id).count
|
||||
# counters[COUNT_SESSION] = MusicSession.where(:band_id => bb.id).count
|
||||
counters[COUNT_RECORD] = Recording.where(:band_id => bb.id).count
|
||||
counters[COUNT_SESSION] = MusicSession.where(:band_id => bb.id).count
|
||||
@user_counters[bb.id] << counters
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue