docbrown/app/controllers/concerns/api/users_controller.rb
Josh Puetz 74e44aeb61
Documentation for Negative Behavior APIs (#18187)
Co-authored-by: Suzanne Aitchison <suzanne@forem.com>
2022-07-28 14:30:32 -05:00

73 lines
2.2 KiB
Ruby

module Api
module UsersController
extend ActiveSupport::Concern
SHOW_ATTRIBUTES_FOR_SERIALIZATION = %i[
id username name summary twitter_username github_username website_url
location created_at profile_image registered
].freeze
def show
relation = User.joins(:profile).select(SHOW_ATTRIBUTES_FOR_SERIALIZATION)
@user = if params[:id] == "by_username"
relation.find_by!(username: params[:url])
else
relation.find(params[:id])
end
not_found unless @user.registered
end
def me
render :show
end
def suspend
authorize(@user, :toggle_suspension_status?)
target_user = User.find(params[:id])
suspend_params = { note_for_current_role: params[:note], user_status: "Suspended" }
begin
Moderator::ManageActivityAndRoles.handle_user_roles(admin: @user,
user: target_user,
user_params: suspend_params)
payload = { action: "api_user_suspend", target_user_id: target_user.id }
Audit::Logger.log(:admin_api, @user, payload)
render status: :no_content
rescue StandardError
render json: {
success: false,
message: @user.errors_as_sentence
}, status: :unprocessable_entity
end
end
def unpublish
authorize(@user, :unpublish_all_articles?)
target_user = User.find(params[:id].to_i)
target_comments = target_user.comments.where(deleted: false)
# Keep track of affected ids for AuditLog trail
article_ids = Article.published.where(user_id: target_user.id).ids
comment_ids = target_comments.ids
# Unpublish posts and delete comments w/ boolean attr to allow revert
Moderator::UnpublishAllArticlesWorker.perform_async(target_user.id)
target_comments.update(deleted: true)
payload = {
action: "api_user_unpublish",
target_user_id: target_user.id,
target_article_ids: article_ids,
target_comment_ids: comment_ids
}
Audit::Logger.log(:admin_api, @user, payload)
render status: :no_content
end
end
end