- Automate the deletion of accounts that have requested deletion via account settings. - Add a Sidekiq job that runs daily to find accounts that have requested deletion and have passed the 7-day window. - This job deletes the account and then soft-deletes users if they do not belong to any other account. - This job also sends an email to the Chatwoot instance admin for compliance purposes. - The Chatwoot instance admin's email is configurable via the `CHATWOOT_INSTANCE_ADMIN_EMAIL` global config. --------- Co-authored-by: Sojan Jose <sojan@pepalo.com>
28 lines
689 B
Ruby
28 lines
689 B
Ruby
class Internal::DeleteAccountsJob < ApplicationJob
|
|
queue_as :scheduled_jobs
|
|
|
|
def perform
|
|
delete_expired_accounts
|
|
end
|
|
|
|
private
|
|
|
|
def delete_expired_accounts
|
|
accounts_pending_deletion.each do |account|
|
|
AccountDeletionService.new(account: account).perform
|
|
end
|
|
end
|
|
|
|
def accounts_pending_deletion
|
|
Account.where("custom_attributes->>'marked_for_deletion_at' IS NOT NULL")
|
|
.select { |account| deletion_period_expired?(account) }
|
|
end
|
|
|
|
def deletion_period_expired?(account)
|
|
deletion_time = account.custom_attributes['marked_for_deletion_at']
|
|
return false if deletion_time.blank?
|
|
|
|
DateTime.parse(deletion_time) <= Time.current
|
|
end
|
|
end
|