end
def search
- @accounts = SearchService.new.call(params[:q], params[:resolve] == 'true')
+ limit = params[:limit] ? [DEFAULT_ACCOUNTS_LIMIT, params[:limit].to_i].min : DEFAULT_ACCOUNTS_LIMIT
+ @accounts = SearchService.new.call(params[:q], limit, params[:resolve] == 'true')
render action: :index
end
class SearchService < BaseService
- def call(query, resolve = false)
+ def call(query, limit, resolve = false)
return if query.blank?
username, domain = query.split('@')
- if domain.nil?
- search_all(username)
+ results = if domain.nil?
+ Account.search_for(username)
else
- search_or_resolve(username, domain, resolve)
+ Account.search_for("#{username} #{domain}")
end
- end
- private
+ results = results.limit(limit).with_counters
- def search_all(username)
- Account.search_for(username)
- end
+ if resolve && results.empty? && !domain.nil?
+ results = [FollowRemoteAccountService.new.call("#{username}@#{domain}")]
+ end
- def search_or_resolve(username, domain, resolve)
- results = Account.search_for("#{username} #{domain}")
- return [FollowRemoteAccountService.new.call("#{username}@#{domain}")] if results.empty? && resolve
results
end
end