feat: Limit the number of custom filters per user (#7101)
This commit is contained in:
@@ -11,6 +11,7 @@ class Api::V1::Accounts::CustomFiltersController < Api::V1::Accounts::BaseContro
|
|||||||
@custom_filter = current_user.custom_filters.create!(
|
@custom_filter = current_user.custom_filters.create!(
|
||||||
permitted_payload.merge(account_id: Current.account.id)
|
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
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ export default {
|
|||||||
const errorMessage = error?.message;
|
const errorMessage = error?.message;
|
||||||
this.alertMessage =
|
this.alertMessage =
|
||||||
errorMessage || this.filterType === 0
|
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');
|
: this.$t('FILTER.CUSTOM_VIEWS.ADD.API_SEGMENTS.ERROR_MESSAGE');
|
||||||
} finally {
|
} finally {
|
||||||
this.showAlert(this.alertMessage);
|
this.showAlert(this.alertMessage);
|
||||||
|
|||||||
@@ -17,8 +17,16 @@
|
|||||||
# index_custom_filters_on_user_id (user_id)
|
# index_custom_filters_on_user_id (user_id)
|
||||||
#
|
#
|
||||||
class CustomFilter < ApplicationRecord
|
class CustomFilter < ApplicationRecord
|
||||||
|
MAX_FILTER_PER_USER = 50
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
belongs_to :account
|
belongs_to :account
|
||||||
|
|
||||||
enum filter_type: { conversation: 0, contact: 1, report: 2 }
|
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
|
end
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ en:
|
|||||||
connection_closed_error: Connection closed.
|
connection_closed_error: Connection closed.
|
||||||
validations:
|
validations:
|
||||||
name: should not start or end with symbols, and it should not have < > / \ @ characters.
|
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:
|
reports:
|
||||||
period: Reporting period %{since} to %{until}
|
period: Reporting period %{since} to %{until}
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ RSpec.describe 'Custom Filters API', type: :request do
|
|||||||
|
|
||||||
context 'when it is an authenticated user' do
|
context 'when it is an authenticated user' do
|
||||||
let(:user) { create(:user, account: account) }
|
let(:user) { create(:user, account: account) }
|
||||||
|
let(:new_account) { create(:account) }
|
||||||
|
let(:new_user) { create(:user, account: new_account) }
|
||||||
|
|
||||||
it 'creates the filter' do
|
it 'creates the filter' do
|
||||||
expect do
|
expect do
|
||||||
@@ -77,6 +79,23 @@ RSpec.describe 'Custom Filters API', type: :request do
|
|||||||
json_response = response.parsed_body
|
json_response = response.parsed_body
|
||||||
expect(json_response['name']).to eq 'vip-customers'
|
expect(json_response['name']).to eq 'vip-customers'
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user