Initial commit
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
require_relative '../builder/builder_users_module'
|
||||
|
||||
require_dependency 'carto/tracking/events'
|
||||
|
||||
module Carto
|
||||
module Api
|
||||
class MapcapsController < ::Api::ApplicationController
|
||||
include Carto::ControllerHelper
|
||||
include Carto::Builder::BuilderUsersModule
|
||||
|
||||
ssl_required :show, :create, :destroy, :index
|
||||
|
||||
before_filter :builder_users_only,
|
||||
:load_visualization,
|
||||
:owners_only
|
||||
before_filter :load_mapcap, only: [:show, :destroy]
|
||||
|
||||
after_filter :track_published_map, only: :create
|
||||
|
||||
rescue_from StandardError, with: :rescue_from_standard_error
|
||||
rescue_from Carto::LoadError,
|
||||
Carto::UnauthorizedError,
|
||||
Carto::UnprocesableEntityError, with: :rescue_from_carto_error
|
||||
|
||||
def index
|
||||
render_jsonp(@visualization.mapcaps.map { |mapcap| Carto::Api::MapcapPresenter.new(mapcap).to_poro })
|
||||
end
|
||||
|
||||
def create
|
||||
mapcap = @visualization.create_mapcap!
|
||||
|
||||
render_jsonp(Carto::Api::MapcapPresenter.new(mapcap).to_poro, :created)
|
||||
rescue ActiveRecord::RecordInvalid => exception
|
||||
message = exception.record.errors.full_messages.join(', ')
|
||||
raise Carto::UnprocesableEntityError.new(message)
|
||||
end
|
||||
|
||||
def show
|
||||
render_jsonp(Carto::Api::MapcapPresenter.new(@mapcap).to_poro)
|
||||
end
|
||||
|
||||
def destroy
|
||||
@mapcap.destroy
|
||||
|
||||
render_jsonp({}, :no_content)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_visualization
|
||||
visualization_id = uuid_parameter(:visualization_id)
|
||||
|
||||
@visualization = Carto::Visualization.find(visualization_id)
|
||||
|
||||
raise ActiveRecord::RecordNotFound if @visualization.canonical?
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
raise Carto::LoadError.new("Visualization not found: #{visualization_id}")
|
||||
end
|
||||
|
||||
def owners_only
|
||||
raise Carto::UnauthorizedError.new unless @visualization.writable_by?(current_user)
|
||||
end
|
||||
|
||||
def load_mapcap
|
||||
mapcap_id = uuid_parameter(:id)
|
||||
|
||||
@mapcap = Carto::Mapcap.find(mapcap_id)
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
raise Carto::LoadError.new("Mapcap not found: #{mapcap_id}")
|
||||
end
|
||||
|
||||
def track_published_map
|
||||
current_viewer_id = current_viewer.id
|
||||
Carto::Tracking::Events::PublishedMap.new(current_viewer_id,
|
||||
user_id: current_viewer_id,
|
||||
visualization_id: @visualization.id).report
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user