docbrown/app/controllers/api/v1/reactions_controller.rb
Joshua Wehner 892ad01264
Restrict Reactions API to admins (#18424)
* Restrict Reactions API to admins

* Also update API docs spec

* Removed unneeded pundit_user
2022-09-08 17:56:42 +02:00

58 lines
1.7 KiB
Ruby

module Api
module V1
class ReactionsController < ApiController
before_action :authenticate!
before_action :require_admin
def create
remove_count_cache_key
result = ReactionHandler.create(params, current_user: current_user || @user)
if result.success?
render json: {
result: result.action,
category: result.category,
id: result.reaction.id,
reactable_id: result.reaction.reactable_id,
reactable_type: result.reaction.reactable_type
},
status: (result.action == "create" ? :created : :ok)
else
render json: { error: result.errors_as_sentence, status: 422 }, status: :unprocessable_entity
end
end
def toggle
remove_count_cache_key
result = ReactionHandler.toggle(params, current_user: current_user || @user)
if result.success?
render json: {
result: result.action,
category: result.category,
id: result.reaction.id,
reactable_id: result.reaction.reactable_id,
reactable_type: result.reaction.reactable_type
}
else
render json: { error: result.errors_as_sentence, status: 422 }, status: :unprocessable_entity
end
end
private
# TODO: should this move to toggle service? refactor?
def remove_count_cache_key
return unless params[:reactable_type] == "Article"
Rails.cache.delete "count_for_reactable-Article-#{params[:reactable_id]}"
end
def require_admin
authorize :reaction, :api?
end
end
end
end