80 lines
2.0 KiB
Ruby
80 lines
2.0 KiB
Ruby
|
module CartoDB
|
||
|
class QuotaChecker
|
||
|
def initialize(user)
|
||
|
@user = user
|
||
|
end
|
||
|
|
||
|
def will_be_over_table_quota?(number_of_new_tables)
|
||
|
return false unless user.remaining_table_quota
|
||
|
|
||
|
number_of_new_tables.to_i > user.remaining_table_quota.to_i
|
||
|
end
|
||
|
|
||
|
def over_table_quota?
|
||
|
return false unless user.remaining_table_quota
|
||
|
|
||
|
user.tables.count > user.table_quota.to_i
|
||
|
end
|
||
|
|
||
|
def will_be_over_public_map_quota?(number_of_new_maps = 1)
|
||
|
return false unless user.public_map_quota
|
||
|
|
||
|
public_map_count + number_of_new_maps > user.public_map_quota
|
||
|
end
|
||
|
|
||
|
def will_be_over_public_dataset_quota?(number_of_new_datasets = 1)
|
||
|
return false unless user.public_dataset_quota
|
||
|
|
||
|
public_dataset_count + number_of_new_datasets > user.public_dataset_quota
|
||
|
end
|
||
|
|
||
|
def will_be_over_private_map_quota?(number_of_new_maps = 1)
|
||
|
return false unless user.private_map_quota
|
||
|
|
||
|
private_map_count + number_of_new_maps > user.private_map_quota
|
||
|
end
|
||
|
|
||
|
def will_be_over_regular_api_key_quota?
|
||
|
return false unless user.regular_api_key_quota
|
||
|
|
||
|
regular_api_key_count >= user.regular_api_key_quota
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def public_map_count
|
||
|
public_count(Carto::Visualization::MAP_TYPES)
|
||
|
end
|
||
|
|
||
|
def public_dataset_count
|
||
|
public_count(Carto::Visualization::TYPE_CANONICAL)
|
||
|
end
|
||
|
|
||
|
def private_map_count
|
||
|
Carto::VisualizationQueryBuilder.user_private_privacy_visualizations(@user).count
|
||
|
end
|
||
|
|
||
|
def regular_api_key_count
|
||
|
user.api_keys.select { |api_key| api_key.type == Carto::ApiKey::TYPE_REGULAR }.count
|
||
|
end
|
||
|
|
||
|
def public_count(types)
|
||
|
query_builder = Carto::VisualizationQueryBuilder.new.
|
||
|
with_user_id(@user.id).
|
||
|
with_types(types).
|
||
|
with_privacy(not_private)
|
||
|
query_builder.count
|
||
|
end
|
||
|
|
||
|
def not_private
|
||
|
[
|
||
|
Carto::Visualization::PRIVACY_PUBLIC,
|
||
|
Carto::Visualization::PRIVACY_LINK,
|
||
|
Carto::Visualization::PRIVACY_PROTECTED
|
||
|
]
|
||
|
end
|
||
|
|
||
|
attr_reader :user
|
||
|
end
|
||
|
end
|