68 lines
2.4 KiB
Ruby
68 lines
2.4 KiB
Ruby
require_relative '../../../models/carto/permission'
|
|
|
|
module Carto
|
|
module Api
|
|
class ColumnsController < ::Api::ApplicationController
|
|
|
|
ssl_required :index, :show, :create, :update, :destroy
|
|
|
|
before_filter :load_user_table, only: [:index, :show, :create, :update, :destroy]
|
|
before_filter :read_privileges?, only: [:index, :show]
|
|
before_filter :write_privileges?, only: [:create, :update, :destroy]
|
|
|
|
def index
|
|
render_jsonp(@user_table.service.schema(cartodb_types: true))
|
|
end
|
|
|
|
def show
|
|
resp = @user_table.service.schema(cartodb_types: true).select { |e| e[0] == params[:id].to_sym }.first.last
|
|
render_jsonp(type: resp)
|
|
rescue => e
|
|
CartoDB::Logger.error(message: 'Error loading column', exception: e,
|
|
column_id: params[:id], user_table: @user_table)
|
|
render_jsonp({ errors: "Column #{params[:id]} doesn't exist" }, 404)
|
|
end
|
|
|
|
def create
|
|
render_jsonp(@user_table.service.add_column!(params.slice(:type, :name)))
|
|
rescue => e
|
|
errors = e.is_a?(CartoDB::InvalidType) ? [e.db_message] : [translate_error(e.message.split("\n").first)]
|
|
render_jsonp({ errors: errors }, 400)
|
|
end
|
|
|
|
def update
|
|
render_jsonp(@user_table.service.modify_column!(name: params[:id],
|
|
type: params[:type],
|
|
new_name: params[:new_name]))
|
|
rescue => e
|
|
errors = e.is_a?(CartoDB::InvalidType) ? [e.db_message] : [translate_error(e.message.split("\n").first)]
|
|
render_jsonp({ errors: errors }, 400)
|
|
end
|
|
|
|
def destroy
|
|
@user_table.service.drop_column!(name: params[:id])
|
|
|
|
head :no_content
|
|
rescue => e
|
|
errors = e.is_a?(CartoDB::InvalidType) ? [e.db_message] : [translate_error(e.message.split("\n").first)]
|
|
render_jsonp({ errors: errors }, 400)
|
|
end
|
|
|
|
protected
|
|
|
|
def load_user_table
|
|
@user_table = Carto::Helpers::TableLocator.new.get_by_id_or_name(params[:table_id], current_user)
|
|
raise RecordNotFound unless @user_table
|
|
end
|
|
|
|
def read_privileges?
|
|
head(401) unless current_user && @user_table.visualization.is_viewable_by_user?(current_user)
|
|
end
|
|
|
|
def write_privileges?
|
|
head(401) unless current_user && @user_table.visualization.writable_by?(current_user)
|
|
end
|
|
end
|
|
end
|
|
end
|