refactor(accounts): Improve destroy_later atomicity and add controller error handling (#1395)

* refactor(accounts): Improve destroy_later atomicity and add controller error handling

* Address PR comment

---------

Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
This commit is contained in:
sentry[bot]
2026-04-07 15:53:25 +02:00
committed by GitHub
parent bc0202dfc1
commit 117ab2b45f
4 changed files with 13 additions and 4 deletions

View File

@@ -113,8 +113,13 @@ class AccountsController < ApplicationController
if @account.linked?
redirect_to account_path(@account), alert: t("accounts.destroy.cannot_delete_linked")
else
@account.destroy_later
redirect_to accounts_path, notice: t("accounts.destroy.success", type: @account.accountable_type)
begin
@account.destroy_later
redirect_to accounts_path, notice: t("accounts.destroy.success", type: @account.accountable_type)
rescue => e
Rails.logger.error "Failed to schedule account #{@account.id} for deletion: #{e.message}"
redirect_to accounts_path, alert: t("accounts.destroy.failed")
end
end
end

View File

@@ -1,5 +1,6 @@
class DestroyJob < ApplicationJob
queue_as :low_priority
self.enqueue_after_transaction_commit = :never
def perform(model)
model.destroy

View File

@@ -311,8 +311,10 @@ class Account < ApplicationRecord
end
def destroy_later
mark_for_deletion!
DestroyJob.perform_later(self)
transaction do
mark_for_deletion!
DestroyJob.perform_later(self)
end
end
# Override destroy to handle error recovery for accounts

View File

@@ -24,6 +24,7 @@ en:
destroy:
success: "%{type} account scheduled for deletion"
cannot_delete_linked: "Cannot delete a linked account. Please unlink it first."
failed: "Resource deletion failed. Try again later."
empty:
empty_message: Add an account either via connection, importing or entering manually.
new_account: New account