VRFS-3398 fixing queries, api integration
This commit is contained in:
parent
efd5ffd4ed
commit
36db710b4b
|
|
@ -38,6 +38,7 @@ module JamRuby
|
|||
|
||||
unless (vals=filter[KEY_GENRES]).blank?
|
||||
rel = rel.where("jam_tracks.genre_id IN ('#{vals.join("','")}')")
|
||||
rel = rel.includes(:genre)
|
||||
end
|
||||
|
||||
unless (vals=filter[KEY_INSTRUMENTS]).blank?
|
||||
|
|
@ -49,27 +50,19 @@ module JamRuby
|
|||
rel
|
||||
end
|
||||
|
||||
def search_includes(rel)
|
||||
rel.includes([:instruments, :genres])
|
||||
end
|
||||
|
||||
SONGS_PER_PAGE = 20
|
||||
ARTISTS_PER_PAGE = 20
|
||||
|
||||
def search_results_page(filter=nil)
|
||||
if filter
|
||||
self.data_blob = filter
|
||||
self.save
|
||||
else
|
||||
filter = self.data_blob
|
||||
end
|
||||
|
||||
result_types = filter[KEY_RESULT_TYPES]
|
||||
has_songs, has_artists = result_types.index(KEY_SONGS), result_types.index(KEY_ARTISTS)
|
||||
|
||||
if has_songs
|
||||
rel = do_search(filter)
|
||||
rel = rel.where("name LIKE ?","%#{filter[KEY_SEARCH_STR]}%")
|
||||
unless (val=filter[KEY_SEARCH_STR]).blank?
|
||||
rel = rel.where("name LIKE ?","%#{val}%")
|
||||
end
|
||||
rel = rel.order(:name).includes(:genre)
|
||||
|
||||
pgnum = [filter[KEY_SONGS]['page_num'].to_i, 1].max
|
||||
rel = rel.paginate(:page => pgnum, :per_page => SONGS_PER_PAGE)
|
||||
|
|
@ -92,7 +85,12 @@ module JamRuby
|
|||
|
||||
if has_artists
|
||||
rel = do_search(filter)
|
||||
rel = rel.where("original_artist LIKE ?","%#{filter[KEY_SEARCH_STR]}%")
|
||||
rel = rel.select("DISTINCT ON(jam_tracks.original_artist) jam_tracks.id, jam_tracks.original_artist")
|
||||
|
||||
unless (val=filter[KEY_SEARCH_STR]).blank?
|
||||
rel = rel.where("original_artist LIKE ?","%#{val}%")
|
||||
end
|
||||
rel = rel.order(:original_artist)
|
||||
|
||||
pgnum = [filter[KEY_ARTISTS]['page_num'].to_i, 1].max
|
||||
rel = rel.paginate(:page => pgnum, :per_page => ARTISTS_PER_PAGE)
|
||||
|
|
|
|||
|
|
@ -12,29 +12,37 @@ describe 'JamTrack Search Model' do
|
|||
filter[JamTrackSearch::KEY_RESULT_TYPES] = [JamTrackSearch::KEY_SONGS]
|
||||
filter
|
||||
}
|
||||
let(:freebird) {
|
||||
FactoryGirl.create(:jam_track_with_tracks, original_artist: 'jim bob', name: 'freebird')
|
||||
}
|
||||
let(:stairway) {
|
||||
FactoryGirl.create(:jam_track_with_tracks, original_artist: 'jim bob', name: 'stairway to heaven')
|
||||
}
|
||||
|
||||
before :each do
|
||||
JamTrack.delete_all
|
||||
jam_track1 = FactoryGirl.create(:jam_track_with_tracks, original_artist: 'jim bob', name: 'stairway to heaven')
|
||||
jam_track2 = FactoryGirl.create(:jam_track_with_tracks, original_artist: 'jim bob', name: 'freebird')
|
||||
JamTrackTrack.delete_all
|
||||
freebird
|
||||
stairway
|
||||
end
|
||||
|
||||
describe "Search filter" do
|
||||
|
||||
it "finds by artist" do
|
||||
filter = artist_filter.clone
|
||||
filter[JamTrackSearch::KEY_SEARCH_STR] = 'jim bob'
|
||||
filter[JamTrackSearch::KEY_SEARCH_STR] = freebird.original_artist
|
||||
filter = JamTrackSearch.new.search_results_page(filter)
|
||||
expect(filter[JamTrackSearch::KEY_ARTISTS]['results'].count).to be(2)
|
||||
expect(filter[JamTrackSearch::KEY_ARTISTS]['results'].count).to be(1)
|
||||
end
|
||||
|
||||
it "paginates by artist" do
|
||||
JamTrackSearch::ARTISTS_PER_PAGE.times do |nn|
|
||||
FactoryGirl.create(:jam_track_with_tracks,
|
||||
original_artist: 'jim bob',
|
||||
original_artist: freebird.original_artist + nn.to_s,
|
||||
name: 'abc'+nn.to_s)
|
||||
end
|
||||
filter = artist_filter.clone
|
||||
filter[JamTrackSearch::KEY_SEARCH_STR] = 'jim bob'
|
||||
filter[JamTrackSearch::KEY_SEARCH_STR] = freebird.original_artist
|
||||
out_filter = JamTrackSearch.new.search_results_page(filter.clone)
|
||||
expect(out_filter[JamTrackSearch::KEY_ARTISTS]['results'].count).to be([JamTrackSearch::ARTISTS_PER_PAGE, JamTrack.count].min)
|
||||
num_page = (JamTrack.count / JamTrackSearch::ARTISTS_PER_PAGE) + 1
|
||||
|
|
@ -42,27 +50,29 @@ describe 'JamTrack Search Model' do
|
|||
|
||||
filter[JamTrackSearch::KEY_ARTISTS]['page_num'] = 2
|
||||
out_filter = JamTrackSearch.new.search_results_page(filter.clone)
|
||||
expect(out_filter[JamTrackSearch::KEY_ARTISTS]['results'].count).to be(2)
|
||||
expect(out_filter[JamTrackSearch::KEY_ARTISTS]['results'].count).to be(1)
|
||||
end
|
||||
|
||||
it "finds by song" do
|
||||
filter = song_filter.clone
|
||||
filter[JamTrackSearch::KEY_SEARCH_STR] = 'freebird'
|
||||
filter[JamTrackSearch::KEY_SEARCH_STR] = freebird.name
|
||||
filter = JamTrackSearch.new.search_results_page(filter.clone)
|
||||
expect(filter[JamTrackSearch::KEY_SONGS]['results'].count).to be(1)
|
||||
end
|
||||
|
||||
it "paginates by song" do
|
||||
JamTrackSearch::SONGS_PER_PAGE.times do |nn|
|
||||
(JamTrackSearch::SONGS_PER_PAGE + 2).times do |nn|
|
||||
FactoryGirl.create(:jam_track_with_tracks,
|
||||
original_artist: 'jim bob',
|
||||
original_artist: freebird.original_artist,
|
||||
name: 'abc'+nn.to_s)
|
||||
end
|
||||
filter = song_filter.clone
|
||||
filter[JamTrackSearch::KEY_SEARCH_STR] = 'abc'
|
||||
out_filter = JamTrackSearch.new.search_results_page(filter.clone)
|
||||
expect(out_filter[JamTrackSearch::KEY_SONGS]['results'].count).to be([JamTrackSearch::SONGS_PER_PAGE, JamTrack.count].min)
|
||||
num_page = (JamTrack.count / JamTrackSearch::SONGS_PER_PAGE) + 1
|
||||
|
||||
total_count = JamTrack.where("name LIKE 'abc%'").count
|
||||
num_page = (total_count / JamTrackSearch::SONGS_PER_PAGE) + (0==(total_count % JamTrackSearch::SONGS_PER_PAGE) ? 0 : 1)
|
||||
expect(out_filter[JamTrackSearch::KEY_SONGS]['page_count']).to be(num_page)
|
||||
|
||||
filter[JamTrackSearch::KEY_SONGS]['page_num'] = 2
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
class ApiSearchController < ApiController
|
||||
|
||||
# have to be signed in currently to see this screen
|
||||
before_filter :api_signed_in_user
|
||||
before_filter :api_signed_in_user, :except => :jam_tracks
|
||||
|
||||
respond_to :json
|
||||
|
||||
|
|
@ -68,11 +68,10 @@ class ApiSearchController < ApiController
|
|||
|
||||
def jam_tracks
|
||||
if request.get?
|
||||
render(json: {}, status: 200) and return
|
||||
elsif request.post?
|
||||
json = JSON.parse(request.body)
|
||||
result = JamTrackSearch.search_results_page(json)
|
||||
|
||||
render json: result.to_json, status: 200
|
||||
result = JamTrackSearch.new.search_results_page(request.params[:api_search])
|
||||
render(json: result.to_json, status: 200) and return
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue