Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add private map count to /me #15464

Merged
merged 5 commits into from
Feb 10, 2020
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ Development
- 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))
- Add private map count to /me ([#15464](https://github.com/CartoDB/cartodb/pull/15464))

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
gonzaloriestra marked this conversation as resolved.
Show resolved Hide resolved

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
gonzaloriestra marked this conversation as resolved.
Show resolved Hide resolved
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