Skip to content

Commit

Permalink
Merge pull request #15464 from CartoDB/private-maps-count
Browse files Browse the repository at this point in the history
Add private map count to /me
  • Loading branch information
alrocar committed Feb 10, 2020
2 parents a5a7f22 + fd0b2e6 commit 4d7c96c
Show file tree
Hide file tree
Showing 13 changed files with 109 additions and 27 deletions.
3 changes: 2 additions & 1 deletion NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ Development
- Invalidate session at logout ([#2334](https://github.com/CartoDB/support/issues/2334))
- Better error reporting for BigQuery connector ([#15383](https://github.com/CartoDB/cartodb/issues/15383))
- Fix DO subscriptions when estimated_delivery_days is NULL ([#15451](https://github.com/CartoDB/cartodb/pull/15451))
- Improve management of gcloud DO settings through API keys ([#15453](https://github.com/CartoDB/cartodb/pull/15453) and [#15467](https://github.com/CartoDB/cartodb/pull/15467))
- Improve management of gcloud DO settings through API keys ([#15453](https://github.com/CartoDB/cartodb/pull/15453))
- Add private map count to /me ([#15464](https://github.com/CartoDB/cartodb/pull/15464))
- Fix CSV delimiter detection ([#15423](https://github.com/CartoDB/cartodb/issues/15423))

4.34.0 (2020-01-28)
Expand Down
1 change: 1 addition & 0 deletions app/controllers/carto/api/user_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ def data(options = {})
public_privacy_map_count: @user.public_privacy_visualization_count,
link_privacy_map_count: @user.link_privacy_visualization_count,
password_privacy_map_count: @user.password_privacy_visualization_count,
private_privacy_map_count: @user.private_privacy_visualization_count,
owned_visualization_count: @user.owned_visualization_count,
all_visualization_count: @user.all_visualization_count,
visualization_count: @user.visualization_count,
Expand Down
3 changes: 2 additions & 1 deletion app/models/carto/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ class Carto::User < ActiveRecord::Base
:database_username, :database_password, :in_database,
:db_size_in_bytes, :get_api_calls, :table_count, :public_visualization_count, :all_visualization_count,
:visualization_count, :owned_visualization_count, :twitter_imports_count,
:link_privacy_visualization_count, :password_privacy_visualization_count, :public_privacy_visualization_count
:link_privacy_visualization_count, :password_privacy_visualization_count, :public_privacy_visualization_count,
:private_privacy_visualization_count
] => :service

attr_reader :password
Expand Down
12 changes: 10 additions & 2 deletions app/models/carto/user_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,20 @@ def password_privacy_visualization_count
.count
end

def private_privacy_visualization_count
return 0 unless @user.id

Carto::VisualizationQueryBuilder.user_private_privacy_visualizations(@user)
.build
.count
end

def all_visualization_count
return 0 unless @user.id

Carto::VisualizationQueryBuilder.user_all_visualizations(@user)
.build
.count
.build
.count
end

def twitter_imports_count(options={})
Expand Down
1 change: 1 addition & 0 deletions app/models/carto/visualization.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class Carto::Visualization < ActiveRecord::Base
TYPE_KUVIZ = 'kuviz'.freeze

VALID_TYPES = [TYPE_CANONICAL, TYPE_DERIVED, TYPE_SLIDE, TYPE_REMOTE, TYPE_KUVIZ].freeze
MAP_TYPES = [TYPE_DERIVED, TYPE_KUVIZ].freeze

KIND_GEOM = 'geom'.freeze
KIND_RASTER = 'raster'.freeze
Expand Down
3 changes: 1 addition & 2 deletions app/models/permission.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,7 @@ def notify_permissions_change(permissions_changes)
# be applied to a type of object. But with an array this is open
# to more than one permission change at a time
perm.each do |p|
if real_entity_type == CartoDB::Visualization::Member::TYPE_DERIVED ||
real_entity_type == CartoDB::Visualization::Member::TYPE_KUVIZ
if Carto::Visualization::MAP_TYPES.include?(real_entity_type)
if p['action'] == 'grant'
# At this moment just inform as read grant
if p['type'].include?('r')
Expand Down
8 changes: 2 additions & 6 deletions app/models/quota_checker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,13 @@ def public_map_count

query_builder = Carto::VisualizationQueryBuilder.new.
with_user_id(@user.id).
with_types([Carto::Visualization::TYPE_DERIVED, Carto::Visualization::TYPE_KUVIZ]).
with_types(Carto::Visualization::MAP_TYPES).
with_privacy(not_private)
query_builder.build.count
end

def private_map_count
query_builder = Carto::VisualizationQueryBuilder.new.
with_user_id(@user.id).
with_types([Carto::Visualization::TYPE_DERIVED, Carto::Visualization::TYPE_KUVIZ]).
with_privacy(Carto::Visualization::PRIVACY_PRIVATE)
query_builder.build.count
Carto::VisualizationQueryBuilder.user_private_privacy_visualizations(@user).build.count
end

def regular_api_key_count
Expand Down
27 changes: 17 additions & 10 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1538,36 +1538,43 @@ def import_count

# Get the count of public visualizations
def public_visualization_count
visualization_count({
type: Carto::Visualization::TYPE_DERIVED,
privacy: Carto::Visualization::PRIVACY_PUBLIC,
exclude_shared: true,
exclude_raster: true
})
visualization_count(
type: Carto::Visualization::MAP_TYPES,
privacy: Carto::Visualization::PRIVACY_PUBLIC,
exclude_shared: true,
exclude_raster: true
)
end

def public_privacy_visualization_count
public_visualization_count
end

def link_privacy_visualization_count
visualization_count(type: Carto::Visualization::TYPE_DERIVED,
visualization_count(type: Carto::Visualization::MAP_TYPES,
privacy: Carto::Visualization::PRIVACY_LINK,
exclude_shared: true,
exclude_raster: true)
end

def password_privacy_visualization_count
visualization_count(type: Carto::Visualization::TYPE_DERIVED,
visualization_count(type: Carto::Visualization::MAP_TYPES,
privacy: Carto::Visualization::PRIVACY_PROTECTED,
exclude_shared: true,
exclude_raster: true)
end

def private_privacy_visualization_count
visualization_count(type: Carto::Visualization::MAP_TYPES,
privacy: Carto::Visualization::PRIVACY_PRIVATE,
exclude_shared: true,
exclude_raster: true)
end

# Get the count of all visualizations
def all_visualization_count
visualization_count({
type: Carto::Visualization::TYPE_DERIVED,
type: Carto::Visualization::MAP_TYPES,
exclude_shared: false,
exclude_raster: false
})
Expand All @@ -1576,7 +1583,7 @@ def all_visualization_count
# Get user owned visualizations
def owned_visualizations_count
visualization_count({
type: Carto::Visualization::TYPE_DERIVED,
type: Carto::Visualization::MAP_TYPES,
exclude_shared: true,
exclude_raster: false
})
Expand Down
5 changes: 4 additions & 1 deletion app/models/user/user_decorator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ def activity(options = {})
state: state,
account_type: account_type,
table_count: table_count,
public_map_count: public_privacy_visualization_count + link_privacy_visualization_count + password_privacy_visualization_count,
public_map_count: public_privacy_visualization_count + link_privacy_visualization_count +
password_privacy_visualization_count,
private_map_count: private_privacy_visualization_count,
map_count: all_visualization_count,
map_views: map_views,
geocoding_credits_count: organization_user? ? organization.get_geocoding_calls : get_geocoding_calls,
Expand Down Expand Up @@ -52,6 +54,7 @@ def data(options = {})
public_privacy_map_count: public_privacy_visualization_count,
link_privacy_map_count: link_privacy_visualization_count,
password_privacy_map_count: password_privacy_visualization_count,
private_privacy_map_count: private_privacy_visualization_count,
all_visualization_count: all_visualization_count,
visualization_count: visualization_count,
owned_visualization_count: owned_visualizations_count,
Expand Down
14 changes: 10 additions & 4 deletions app/queries/carto/visualization_query_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,29 @@ def self.user_public_visualizations(user)
end

def self.user_public_privacy_visualizations(user)
user_public(user).with_type(Carto::Visualization::TYPE_DERIVED)
user_public(user).with_types(Carto::Visualization::MAP_TYPES)
end

def self.user_link_privacy_visualizations(user)
new.with_user_id(user.id)
.with_type(Carto::Visualization::TYPE_DERIVED)
.with_types(Carto::Visualization::MAP_TYPES)
.with_privacy(Carto::Visualization::PRIVACY_LINK)
end

def self.user_password_privacy_visualizations(user)
new.with_user_id(user.id)
.with_type(Carto::Visualization::TYPE_DERIVED)
.with_types(Carto::Visualization::MAP_TYPES)
.with_privacy(Carto::Visualization::PRIVACY_PROTECTED)
end

def self.user_private_privacy_visualizations(user)
new.with_user_id(user.id)
.with_types(Carto::Visualization::MAP_TYPES)
.with_privacy(Carto::Visualization::PRIVACY_PRIVATE)
end

def self.user_all_visualizations(user)
new.with_user_id(user ? user.id : nil).with_type(Carto::Visualization::TYPE_DERIVED)
new.with_user_id(user ? user.id : nil).with_types(Carto::Visualization::MAP_TYPES)
end

def self.user_public(user)
Expand Down
1 change: 1 addition & 0 deletions spec/models/user_presenter_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ def compare_data(original_old_data, new_data, org_user = false, mobile_sdk_enabl
new_data[:public_privacy_visualization_count].should == old_data[:public_privacy_visualization_count]
new_data[:link_privacy_visualization_count].should == old_data[:link_privacy_visualization_count]
new_data[:password_privacy_visualization_count].should == old_data[:password_privacy_visualization_count]
new_data[:private_privacy_visualization_count].should == old_data[:private_privacy_visualization_count]
new_data[:all_visualization_count].should == old_data[:all_visualization_count]
new_data[:visualization_count].should == old_data[:visualization_count]
new_data[:failed_import_count].should == old_data[:failed_import_count]
Expand Down
56 changes: 56 additions & 0 deletions spec/queries/carto/visualization_query_builder_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -505,4 +505,60 @@ def preload_activerecord_metadata
destroy_full_visualization(map, table, table_visualization, visualization)
end
end

describe 'user visualizations helpers' do
before(:all) do
@user = FactoryGirl.create(:carto_user, private_maps_enabled: true)
FactoryGirl.create(:carto_visualization, user_id: @user.id, type: Carto::Visualization::TYPE_DERIVED,
privacy: Carto::Visualization::PRIVACY_PUBLIC)
FactoryGirl.create(:carto_visualization, user_id: @user.id, type: Carto::Visualization::TYPE_KUVIZ,
privacy: Carto::Visualization::PRIVACY_PUBLIC)
FactoryGirl.create(:carto_visualization, user_id: @user.id, type: Carto::Visualization::TYPE_CANONICAL,
privacy: Carto::Visualization::PRIVACY_PRIVATE)
FactoryGirl.create(:carto_visualization, user_id: @user.id, type: Carto::Visualization::TYPE_DERIVED,
privacy: Carto::Visualization::PRIVACY_PRIVATE)
FactoryGirl.create(:carto_visualization, user_id: @user.id, type: Carto::Visualization::TYPE_DERIVED,
privacy: Carto::Visualization::PRIVACY_LINK)
FactoryGirl.create(:carto_visualization, user_id: @user.id, type: Carto::Visualization::TYPE_DERIVED,
privacy: Carto::Visualization::PRIVACY_PROTECTED, password: 'x')
end

after(:all) do
@user.destroy
end

it 'returns the private maps of a user' do
result = Carto::VisualizationQueryBuilder.user_private_privacy_visualizations(@user).build

expect(result.count).to eq 1
expect(result.first.privacy).to eq Carto::Visualization::PRIVACY_PRIVATE
end

it 'returns the public maps of a user' do
result = Carto::VisualizationQueryBuilder.user_public_privacy_visualizations(@user).build

expect(result.count).to eq 2
expect(result.all.map(&:privacy).uniq).to eq [Carto::Visualization::PRIVACY_PUBLIC]
end

it 'returns the link maps of a user' do
result = Carto::VisualizationQueryBuilder.user_link_privacy_visualizations(@user).build

expect(result.count).to eq 1
expect(result.first.privacy).to eq Carto::Visualization::PRIVACY_LINK
end

it 'returns the password maps of a user' do
result = Carto::VisualizationQueryBuilder.user_password_privacy_visualizations(@user).build

expect(result.count).to eq 1
expect(result.first.privacy).to eq Carto::Visualization::PRIVACY_PROTECTED
end

it 'returns all the user maps' do
result = Carto::VisualizationQueryBuilder.user_all_visualizations(@user).build

expect(result.count).to eq 5
end
end
end
2 changes: 2 additions & 0 deletions spec/requests/carto/api/users_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
user = @organization.owner
carto_user = Carto::User.where(id: user.id).first
FactoryGirl.create(:carto_visualization, user: carto_user, privacy: Carto::Visualization::PRIVACY_PUBLIC)
FactoryGirl.create(:carto_visualization, user: carto_user, privacy: Carto::Visualization::PRIVACY_PRIVATE)
FactoryGirl.create(:carto_visualization, user: carto_user, privacy: Carto::Visualization::PRIVACY_LINK)
FactoryGirl.create(:carto_visualization, user: carto_user, privacy: Carto::Visualization::PRIVACY_LINK)
FactoryGirl.create(:carto_visualization, user: carto_user,
Expand Down Expand Up @@ -79,6 +80,7 @@
expect(response.body[:user_data][:public_privacy_map_count]).to eq 1
expect(response.body[:user_data][:link_privacy_map_count]).to eq 2
expect(response.body[:user_data][:password_privacy_map_count]).to eq 3
expect(response.body[:user_data][:private_privacy_map_count]).to eq 1
end
end

Expand Down

0 comments on commit 4d7c96c

Please sign in to comment.