From 05cf086766396745219582951f9b792ac5ed2bfb Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 22 Mar 2017 02:32:27 +0100 Subject: [PATCH] New API method: /api/v1/search Returns accounts, statuses, hashtags arrays --- app/controllers/api/v1/accounts_controller.rb | 2 +- app/controllers/api/v1/search_controller.rb | 9 +++++++ app/models/account.rb | 4 +-- app/models/tag.rb | 19 ++++++++++++++ app/services/account_search_service.rb | 26 +++++++++++++++++++ app/services/fetch_remote_resource_service.rb | 18 +++++++++++++ app/services/search_service.rb | 23 +++++++--------- app/views/api/v1/search/index.rabl | 13 ++++++++++ config/routes.rb | 2 ++ 9 files changed, 99 insertions(+), 17 deletions(-) create mode 100644 app/controllers/api/v1/search_controller.rb create mode 100644 app/services/account_search_service.rb create mode 100644 app/services/fetch_remote_resource_service.rb create mode 100644 app/views/api/v1/search/index.rabl diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 51c948955..f07450eb0 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -115,7 +115,7 @@ class Api::V1::AccountsController < ApiController end def search - @accounts = SearchService.new.call(params[:q], limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:resolve] == 'true', current_account) + @accounts = AccountSearchService.new.call(params[:q], limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:resolve] == 'true', current_account) set_account_counters_maps(@accounts) unless @accounts.nil? diff --git a/app/controllers/api/v1/search_controller.rb b/app/controllers/api/v1/search_controller.rb new file mode 100644 index 000000000..6b1292458 --- /dev/null +++ b/app/controllers/api/v1/search_controller.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class Api::V1::SearchController < ApiController + respond_to :json + + def index + @search = OpenStruct.new(SearchService.new.call(params[:q], 5, params[:resolve] == 'true', current_account)) + end +end diff --git a/app/models/account.rb b/app/models/account.rb index aa0af563c..c35620812 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -222,8 +222,8 @@ SQL end def search_for(terms, limit = 10) - textsearch = '(setweight(to_tsvector(\'simple\', accounts.display_name), \'A\') || setweight(to_tsvector(\'simple\', accounts.username), \'B\') || setweight(to_tsvector(\'simple\', coalesce(accounts.domain, \'\')), \'C\'))' - query = 'to_tsquery(\'simple\', \'\'\' \' || ? || \' \'\'\' || \':*\')' + textsearch = '(setweight(to_tsvector(\'simple\', accounts.display_name), \'A\') || setweight(to_tsvector(\'simple\', accounts.username), \'B\') || setweight(to_tsvector(\'simple\', coalesce(accounts.domain, \'\')), \'C\'))' + query = 'to_tsquery(\'simple\', \'\'\' \' || ? || \' \'\'\' || \':*\')' sql = <