VRFS-3398 fixing queries, api integration

This commit is contained in:
Jonathan Kolyer 2015-08-02 07:31:58 +00:00
parent efd5ffd4ed
commit 36db710b4b
3 changed files with 36 additions and 29 deletions

View File

@ -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)

View File

@ -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

View File

@ -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