feat: Limit the number of custom filters per user (#7101)

This commit is contained in:
Tejaswini Chile
2023-05-22 18:03:15 +05:30
committed by GitHub
parent 68dedc37ba
commit d481b9fbcf
5 changed files with 31 additions and 1 deletions

View File

@@ -11,6 +11,7 @@ class Api::V1::Accounts::CustomFiltersController < Api::V1::Accounts::BaseContro
@custom_filter = current_user.custom_filters.create!(
permitted_payload.merge(account_id: Current.account.id)
)
render json: { error: @custom_filter.errors.messages }, status: :unprocessable_entity and return unless @custom_filter.valid?
end
def update

View File

@@ -98,7 +98,7 @@ export default {
const errorMessage = error?.message;
this.alertMessage =
errorMessage || this.filterType === 0
? this.$t('FILTER.CUSTOM_VIEWS.ADD.API_FOLDERS.ERROR_MESSAGE')
? errorMessage
: this.$t('FILTER.CUSTOM_VIEWS.ADD.API_SEGMENTS.ERROR_MESSAGE');
} finally {
this.showAlert(this.alertMessage);

View File

@@ -17,8 +17,16 @@
# index_custom_filters_on_user_id (user_id)
#
class CustomFilter < ApplicationRecord
MAX_FILTER_PER_USER = 50
belongs_to :user
belongs_to :account
enum filter_type: { conversation: 0, contact: 1, report: 2 }
validate :validate_number_of_filters
def validate_number_of_filters
return true if account.custom_filters.where(user_id: user_id).size < MAX_FILTER_PER_USER
errors.add :account_id, I18n.t('errors.custom_filters.number_of_records')
end
end

View File

@@ -70,6 +70,8 @@ en:
connection_closed_error: Connection closed.
validations:
name: should not start or end with symbols, and it should not have < > / \ @ characters.
custom_filters:
number_of_records: Limit reached. The maximum number of allowed custom filters for a user per account is 50.
reports:
period: Reporting period %{since} to %{until}

View File

@@ -66,6 +66,8 @@ RSpec.describe 'Custom Filters API', type: :request do
context 'when it is an authenticated user' do
let(:user) { create(:user, account: account) }
let(:new_account) { create(:account) }
let(:new_user) { create(:user, account: new_account) }
it 'creates the filter' do
expect do
@@ -77,6 +79,23 @@ RSpec.describe 'Custom Filters API', type: :request do
json_response = response.parsed_body
expect(json_response['name']).to eq 'vip-customers'
end
it 'gives the error for 51st record' do
CustomFilter::MAX_FILTER_PER_USER.times do
create(:custom_filter, user: user, account: account)
end
expect do
post "/api/v1/accounts/#{account.id}/custom_filters", headers: user.create_new_auth_token,
params: payload
end.not_to change(CustomFilter, :count)
expect(response).to have_http_status(:unprocessable_entity)
json_response = response.parsed_body
expect(json_response['message']).to include(
'Account Limit reached. The maximum number of allowed custom filters for a user per account is 50.'
)
end
end
end