cartodb/app/controllers/carto/api/grantables_controller.rb
2020-06-15 10:58:47 +08:00

51 lines
1.6 KiB
Ruby

require_dependency 'cartodb/errors'
module Carto
module Api
class GrantablesController < ::Api::ApplicationController
include PagedSearcher
include Carto::ControllerHelper
respond_to :json
ssl_required :index
before_filter :load_organization
VALID_ORDER_PARAMS = [:id, :name, :type, :avatar_url, :organization_id, :updated_at].freeze
def index
page, per_page, order, _order_direction = page_per_page_order_params(VALID_ORDER_PARAMS)
query = params[:q]
grantable_query = Carto::GrantableQueryBuilder.new(@organization).with_filter(query)
grantables = grantable_query.run(page, per_page, order)
total_entries = grantable_query.count
render_jsonp({
grantables: grantables.map { |g| Carto::Api::GrantablePresenter.new(g).to_poro },
total_entries: total_entries
}, 200)
rescue Carto::ParamInvalidError => e
render json: { errors: e.message }, status: e.status
rescue StandardError => e
CartoDB.notify_exception(e, { params: params })
render json: { errors: e.message }, status: 500
end
private
def load_organization
@organization = Carto::Organization.where(id: params['organization_id']).first
render json: { errors: "Organization #{params['organization_id']} not found" }, status: 404 unless @organization
render json: { errors: "You don't belong to organization #{params['organization_id']}" }, status: 400 unless current_user.organization_id == @organization.id
end
end
end
end