Use `GET /api/v2/search` insteadpull/4/head
@ -1,32 +0,0 @@ | |||||
# frozen_string_literal: true | |||||
class Api::V1::SearchController < Api::BaseController | |||||
include Authorization | |||||
RESULTS_LIMIT = 20 | |||||
before_action -> { doorkeeper_authorize! :read, :'read:search' } | |||||
before_action :require_user! | |||||
respond_to :json | |||||
def index | |||||
@search = Search.new(search_results) | |||||
render json: @search, serializer: REST::SearchSerializer | |||||
end | |||||
private | |||||
def search_results | |||||
SearchService.new.call( | |||||
params[:q], | |||||
current_account, | |||||
limit_param(RESULTS_LIMIT), | |||||
search_params.merge(resolve: truthy_param?(:resolve)) | |||||
) | |||||
end | |||||
def search_params | |||||
params.permit(:type, :offset, :min_id, :max_id, :account_id) | |||||
end | |||||
end |
@ -1,8 +1,32 @@ | |||||
# frozen_string_literal: true | # frozen_string_literal: true | ||||
class Api::V2::SearchController < Api::V1::SearchController | |||||
class Api::V2::SearchController < Api::BaseController | |||||
include Authorization | |||||
RESULTS_LIMIT = 20 | |||||
before_action -> { doorkeeper_authorize! :read, :'read:search' } | |||||
before_action :require_user! | |||||
respond_to :json | |||||
def index | def index | ||||
@search = Search.new(search_results) | @search = Search.new(search_results) | ||||
render json: @search, serializer: REST::V2::SearchSerializer | |||||
render json: @search, serializer: REST::SearchSerializer | |||||
end | |||||
private | |||||
def search_results | |||||
SearchService.new.call( | |||||
params[:q], | |||||
current_account, | |||||
limit_param(RESULTS_LIMIT), | |||||
search_params.merge(resolve: truthy_param?(:resolve)) | |||||
) | |||||
end | |||||
def search_params | |||||
params.permit(:type, :offset, :min_id, :max_id, :account_id) | |||||
end | end | ||||
end | end |
@ -1,12 +1,7 @@ | |||||
# frozen_string_literal: true | # frozen_string_literal: true | ||||
class REST::SearchSerializer < ActiveModel::Serializer | class REST::SearchSerializer < ActiveModel::Serializer | ||||
attributes :hashtags | |||||
has_many :accounts, serializer: REST::AccountSerializer | has_many :accounts, serializer: REST::AccountSerializer | ||||
has_many :statuses, serializer: REST::StatusSerializer | has_many :statuses, serializer: REST::StatusSerializer | ||||
def hashtags | |||||
object.hashtags.map(&:name) | |||||
end | |||||
has_many :hashtags, serializer: REST::TagSerializer | |||||
end | end |
@ -1,7 +0,0 @@ | |||||
# frozen_string_literal: true | |||||
class REST::V2::SearchSerializer < ActiveModel::Serializer | |||||
has_many :accounts, serializer: REST::AccountSerializer | |||||
has_many :statuses, serializer: REST::StatusSerializer | |||||
has_many :hashtags, serializer: REST::TagSerializer | |||||
end |
@ -1,22 +0,0 @@ | |||||
# frozen_string_literal: true | |||||
require 'rails_helper' | |||||
RSpec.describe Api::V1::SearchController, type: :controller do | |||||
render_views | |||||
let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } | |||||
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:search') } | |||||
before do | |||||
allow(controller).to receive(:doorkeeper_token) { token } | |||||
end | |||||
describe 'GET #index' do | |||||
it 'returns http success' do | |||||
get :index, params: { q: 'test' } | |||||
expect(response).to have_http_status(200) | |||||
end | |||||
end | |||||
end |