* Restrict Reactions API to admins * Also update API docs spec * Removed unneeded pundit_user
58 lines
1.7 KiB
Ruby
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
|