fix: drop conv and campaign seq on account delete (#4256)
Conversation and campaign sequences persist in the database even after the related account is deleted. This PR adds an after_desttory callback on the account model that will delete the associated sequences. Fixes: #4252
This commit is contained in:
parent
0cf970dafd
commit
7577c9c888
2 changed files with 16 additions and 0 deletions
|
@ -79,6 +79,7 @@ class Account < ApplicationRecord
|
||||||
|
|
||||||
before_validation :validate_limit_keys
|
before_validation :validate_limit_keys
|
||||||
after_create_commit :notify_creation
|
after_create_commit :notify_creation
|
||||||
|
after_destroy :remove_account_sequences
|
||||||
|
|
||||||
def agents
|
def agents
|
||||||
users.where(account_users: { role: :agent })
|
users.where(account_users: { role: :agent })
|
||||||
|
@ -137,4 +138,9 @@ class Account < ApplicationRecord
|
||||||
def validate_limit_keys
|
def validate_limit_keys
|
||||||
# method overridden in enterprise module
|
# method overridden in enterprise module
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def remove_account_sequences
|
||||||
|
ActiveRecord::Base.connection.exec_query("drop sequence IF EXISTS camp_dpid_seq_#{id}")
|
||||||
|
ActiveRecord::Base.connection.exec_query("drop sequence IF EXISTS conv_dpid_seq_#{id}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,4 +30,14 @@ RSpec.describe Account do
|
||||||
expect(account.usage_limits).to eq({ agents: ChatwootApp.max_limit, inboxes: ChatwootApp.max_limit })
|
expect(account.usage_limits).to eq({ agents: ChatwootApp.max_limit, inboxes: ChatwootApp.max_limit })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when after_destroy is called' do
|
||||||
|
it 'conv_dpid_seq and camp_dpid_seq_ are deleted' do
|
||||||
|
account = create(:account)
|
||||||
|
query = "select * from information_schema.sequences where sequence_name in ('camp_dpid_seq_#{account.id}', 'conv_dpid_seq_#{account.id}');"
|
||||||
|
expect(ActiveRecord::Base.connection.execute(query).count).to eq(2)
|
||||||
|
account.destroy
|
||||||
|
expect(ActiveRecord::Base.connection.execute(query).count).to eq(0)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue