51 lines
1.6 KiB
Ruby
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
|
|
|
|
|