* Documentation for /api/follows end-point * Rename and refactor User suggester * Clean up feature flag * User average count should be unscoped
56 lines
1.8 KiB
Ruby
56 lines
1.8 KiB
Ruby
module Api
|
|
module FollowsController
|
|
extend ActiveSupport::Concern
|
|
|
|
def create
|
|
# API authentication might set current_user or might just set @user
|
|
active_user = current_user || @user
|
|
|
|
user_ids.each do |user_id|
|
|
Users::FollowWorker.perform_async(active_user.id, user_id, "User")
|
|
end
|
|
|
|
org_ids.each do |org_id|
|
|
Users::FollowWorker.perform_async(active_user.id, org_id, "Organization")
|
|
end
|
|
|
|
render json: {
|
|
outcome: I18n.t("api.v0.follows_controller.followed",
|
|
count: user_ids.size + org_ids.size)
|
|
}
|
|
end
|
|
|
|
def tags
|
|
@follows = @user.follows_by_type("ActsAsTaggableOn::Tag")
|
|
.select(%i[id followable_id followable_type points])
|
|
.includes(:followable)
|
|
.order(points: :desc)
|
|
end
|
|
|
|
private
|
|
|
|
# The strange params situation here is mostly due to a bug in the way
|
|
# rswag processes array-type params that appear in a query-string.
|
|
# Also, Rails' strong parameters does not work well with arrays-of-objects.
|
|
# So, in order to include this end-point in the swagger/open-api
|
|
# documentation, while maintaining compatibility with the existing
|
|
# infrastructure, we need to accept two kinds of inputs here -
|
|
# in one case, we receive a list of integer IDs,
|
|
# in the other case, we receive an array of objects, like {id: 123}
|
|
def user_ids
|
|
@user_ids ||= permitted_params[:user_ids].presence
|
|
@user_ids ||= params[:users].pluck("id") if params[:users].present?
|
|
@user_ids ||= []
|
|
end
|
|
|
|
def org_ids
|
|
@org_ids ||= permitted_params[:organization_ids].presence
|
|
@org_ids ||= params[:organizations].pluck("id") if params[:organizations].present?
|
|
@org_ids ||= []
|
|
end
|
|
|
|
def permitted_params
|
|
params.permit(user_ids: [], organization_ids: [])
|
|
end
|
|
end
|
|
end
|