68 lines
1.8 KiB
Ruby
68 lines
1.8 KiB
Ruby
require_relative 'user_presenter'
|
|
|
|
module Carto
|
|
module Api
|
|
class GroupPresenter
|
|
|
|
FULL_FETCH_OPTIONS = {
|
|
fetch_shared_tables_count: true,
|
|
fetch_shared_maps_count: true,
|
|
fetch_users: true
|
|
}
|
|
|
|
def self.full(group)
|
|
Carto::Api::GroupPresenter.new(group, FULL_FETCH_OPTIONS)
|
|
end
|
|
|
|
# Available fetching options:
|
|
# - fetch_shared_tables_count
|
|
# - fetch_shared_maps_count
|
|
# - fetch_users
|
|
def initialize(group, fetching_options = {})
|
|
@group = group
|
|
@fetching_options = fetching_options
|
|
end
|
|
|
|
def to_poro
|
|
poro = {
|
|
id: @group.id,
|
|
organization_id: @group.organization_id,
|
|
name: @group.name,
|
|
display_name: @group.display_name
|
|
}
|
|
|
|
if @fetching_options[:fetch_shared_tables_count] == true
|
|
poro.merge!({ shared_tables_count: shared_tables_count })
|
|
end
|
|
if @fetching_options[:fetch_shared_maps_count] == true
|
|
poro.merge!({ shared_maps_count: shared_maps_count })
|
|
end
|
|
if @fetching_options[:fetch_users] == true
|
|
poro.merge!({ users: users })
|
|
end
|
|
|
|
poro
|
|
end
|
|
|
|
private
|
|
|
|
def shared_tables_count
|
|
shared_visualizations_query.where(:visualizations => { type: Carto::Visualization::TYPE_CANONICAL }).count
|
|
end
|
|
|
|
def shared_maps_count
|
|
shared_visualizations_query.where(:visualizations => { type: Carto::Visualization::TYPE_DERIVED }).count
|
|
end
|
|
|
|
def shared_visualizations_query
|
|
Carto::SharedEntity.where(recipient_id: @group.id).joins(:visualization)
|
|
end
|
|
|
|
def users
|
|
@group.users.map { |u| Carto::Api::UserPresenter.new(u, { fetch_groups: false } ).to_poro }
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|