diff --git a/db/manifest b/db/manifest index bf1ea5bc3..5520c28bb 100755 --- a/db/manifest +++ b/db/manifest @@ -348,4 +348,5 @@ add_test_drive_types.sql updated_subjects.sql update_payment_history.sql lesson_booking_schools.sql -lesson_booking_schools_2.sql \ No newline at end of file +lesson_booking_schools_2.sql +phantom_accounts.sql \ No newline at end of file diff --git a/db/up/phantom_accounts.sql b/db/up/phantom_accounts.sql new file mode 100644 index 000000000..696c57370 --- /dev/null +++ b/db/up/phantom_accounts.sql @@ -0,0 +1,16 @@ +ALTER TABLE users ADD COLUMN phantom BOOLEAN DEFAULT FALSE NOT NULL; + +CREATE OR REPLACE FUNCTION phantom_check() RETURNS TRIGGER +STRICT VOLATILE AS $$ + BEGIN + + -- Remember who changed the payroll when + NEW.phantom := (SELECT NEW.email ilike 'phantom+%@jamkazam.com'); + RETURN NEW; + END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER phantom_update BEFORE INSERT OR UPDATE +ON users FOR EACH ROW EXECUTE PROCEDURE phantom_check(id); + +UPDATE users set updated_at = NOW(); diff --git a/ruby/lib/jam_ruby/models/teacher.rb b/ruby/lib/jam_ruby/models/teacher.rb index 0dcee13fc..d6a49eed6 100644 --- a/ruby/lib/jam_ruby/models/teacher.rb +++ b/ruby/lib/jam_ruby/models/teacher.rb @@ -132,6 +132,13 @@ module JamRuby query = query.where("teaches_age_lower <= ? AND (CASE WHEN teaches_age_upper = 0 THEN true ELSE teaches_age_upper >= ? END)", student_age, student_age) end + # order in this way: https://jamkazam.atlassian.net/browse/VRFS-4058 + # Real teachers who are marked as top. + # Real teachers who are not marked as top. + # Phantom teachers. + + query = query.order("top_rated DESC, phantom ASC") + current_page = params[:page].nil? ? 1 : params[:page].to_i next_page = current_page + 1 diff --git a/ruby/spec/jam_ruby/models/teacher_spec.rb b/ruby/spec/jam_ruby/models/teacher_spec.rb index 3b0c305d0..32003f0cc 100644 --- a/ruby/spec/jam_ruby/models/teacher_spec.rb +++ b/ruby/spec/jam_ruby/models/teacher_spec.rb @@ -20,6 +20,29 @@ describe Teacher do teachers[0].should eq(teacher.user) end + it "sorting" do + + teacher3 = FactoryGirl.create(:teacher, ready_for_session_at: Time.now) + teacher3.user.email = 'phantom+dogpound@jamkazam.com' + teacher3.user.save! + + + teacher2 = FactoryGirl.create(:teacher, ready_for_session_at: Time.now) + teacher2.top_rated = false + teacher2.save! + + + teacher1 = FactoryGirl.create(:teacher, ready_for_session_at: Time.now) + teacher1.top_rated = true + teacher1.save! + + query = Teacher.index(nil, {})[:query] + query.count.should eql 3 + query[0].should eq(teacher1.user) + query[1].should eq(teacher2.user) + query[2].should eq(teacher3.user) + end + it "instruments" do teacher = FactoryGirl.create(:teacher, ready_for_session_at: Time.now) teachers = Teacher.index(nil, {instruments: ['acoustic guitar']})[:query]