--- /dev/null
+# frozen_string_literal: true
+
+class Api::V1::FeaturedTags::SuggestionsController < Api::BaseController
+ before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index
+
+ before_action :require_user!
+ before_action :set_most_used_tags, only: :index
+
+ respond_to :json
+
+ def index
+ render json: @most_used_tags, each_serializer: REST::TagSerializer
+ end
+
+ private
+
+ def set_most_used_tags
+ @most_used_tags = Tag.most_used(current_account).where.not(id: current_account.featured_tags).limit(10)
+ end
+end
--- /dev/null
+# frozen_string_literal: true
+
+class Api::V1::FeaturedTagsController < Api::BaseController
+ before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index
+ before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index
+
+ before_action :require_user!
+ before_action :set_featured_tags, only: :index
+ before_action :set_featured_tag, except: [:index, :create]
+
+ def index
+ render json: @featured_tags, each_serializer: REST::FeaturedTagSerializer
+ end
+
+ def create
+ @featured_tag = current_account.featured_tags.new(featured_tag_params)
+ @featured_tag.reset_data
+ @featured_tag.save!
+ render json: @featured_tag, serializer: REST::FeaturedTagSerializer
+ end
+
+ def destroy
+ @featured_tag.destroy!
+ render_empty
+ end
+
+ private
+
+ def set_featured_tag
+ @featured_tag = current_account.featured_tags.find(params[:id])
+ end
+
+ def set_featured_tags
+ @featured_tags = current_account.featured_tags.order(statuses_count: :desc)
+ end
+
+ def featured_tag_params
+ params.permit(:name)
+ end
+end
--- /dev/null
+# frozen_string_literal: true
+
+class REST::FeaturedTagSerializer < ActiveModel::Serializer
+ attributes :id, :name, :statuses_count, :last_status_at
+
+ def id
+ object.id.to_s
+ end
+end
resource :accounts, only: [:show, :create, :destroy], controller: 'lists/accounts'
end
+ namespace :featured_tags do
+ get :suggestions, to: 'suggestions#index'
+ end
+
+ resources :featured_tags, only: [:index, :create, :destroy]
+
resources :polls, only: [:create, :show] do
resources :votes, only: :create, controller: 'polls/votes'
end