From 12ca06d015aad85d4e8f25dec2924543f7fd2420 Mon Sep 17 00:00:00 2001 From: Edin Dazdarevic Date: Mon, 9 Feb 2015 22:22:33 +0100 Subject: [PATCH] filtering items by traits --- front-api/controllers/common_for_controllers.rb | 6 +++++- front-api/controllers/item.rb | 14 +++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/front-api/controllers/common_for_controllers.rb b/front-api/controllers/common_for_controllers.rb index a66ccd9..f1374f3 100644 --- a/front-api/controllers/common_for_controllers.rb +++ b/front-api/controllers/common_for_controllers.rb @@ -1,5 +1,9 @@ +# converts querystring to hash +def get_querystring_hash() + Rack::Utils.parse_nested_query(request.query_string) +end # converts list of parameters to array of integers def mass_to_i(*id_strings) id_strings.map(&:to_i) -end \ No newline at end of file +end diff --git a/front-api/controllers/item.rb b/front-api/controllers/item.rb index fb0a82c..e93c209 100644 --- a/front-api/controllers/item.rb +++ b/front-api/controllers/item.rb @@ -1,5 +1,3 @@ - - def prepare_items_for_mass_display(items) items.to_json( :except => [:created_at, :current_input_price, :stock, :on_display], @@ -21,6 +19,13 @@ get '/item/:id' do |id_s| prepare_items_for_mass_display(item) end +def filter_by_traits(items) + get_querystring_hash.each do |k,v| + items = items.where(["traits ->> '#{k}' = '#{v}'"]) + end + items +end + # gets items regardless of classification ( useful for frontpage ) get '/item/offset/:offset/limit/:limit' do |offset_s, limit_s| @@ -42,6 +47,7 @@ get '/item/section/:section_id/offset/:offset/limit/:limit' do |section_id_s, of prepare_items_for_mass_display(items) end + # gets items in category ( useful for page showing single category ) get '/item/category/:category_id/offset/:offset/limit/:limit' do |category_id_s, offset_s, limit_s| category_id, offset, limit = mass_to_i(category_id_s, offset_s, limit_s) @@ -49,6 +55,8 @@ get '/item/category/:category_id/offset/:offset/limit/:limit' do |category_id_s, return [].to_json if input_invalid items = Item.best_selling_in_category(category_id, offset,limit) + items = filter_by_traits(items) + prepare_items_for_mass_display(items) end @@ -60,4 +68,4 @@ get '/item/sub_category/:sub_category_id/offset/:offset/limit/:limit' do |sub_ca items = Item.best_selling_in_sub_category(sub_category_id, offset, limit) prepare_items_for_mass_display(items) -end \ No newline at end of file +end