mirror of
https://github.com/we-promise/sure.git
synced 2026-04-18 19:44:09 +00:00
- Introduced `update_access_url!` method to reuse existing SimpleFIN items during reconnections, preserving account linkages. - Refactored `SimplefinConnectionUpdateJob` to update access URLs in place without creating new items or transferring accounts. - Adjusted sync logic to leverage `repair_stale_linkages` for seamless reconnections. - Enhanced `SimplefinItem::Importer` to auto-recover the `good` status if no auth errors are found during sync. - Updated tests to validate in-place updates and preserved account relationships. Co-authored-by: Josh Waldrep <joshua.waldrep5+github@gmail.com>
32 lines
1.3 KiB
Ruby
32 lines
1.3 KiB
Ruby
class SimplefinConnectionUpdateJob < ApplicationJob
|
|
queue_as :high_priority
|
|
|
|
# Disable automatic retries for this job since the setup token is single-use.
|
|
# If the token claim succeeds but sync fails, retrying would fail at claim.
|
|
discard_on Provider::Simplefin::SimplefinError do |job, error|
|
|
Rails.logger.error(
|
|
"SimplefinConnectionUpdateJob discarded: #{error.class} - #{error.message} " \
|
|
"(family_id=#{job.arguments.first[:family_id]}, item_id=#{job.arguments.first[:old_simplefin_item_id]})"
|
|
)
|
|
end
|
|
|
|
def perform(family_id:, old_simplefin_item_id:, setup_token:)
|
|
family = Family.find(family_id)
|
|
simplefin_item = family.simplefin_items.find(old_simplefin_item_id)
|
|
|
|
# Step 1: Claim the new token and update the existing item's access_url.
|
|
# This preserves all existing account linkages - no need to transfer anything.
|
|
simplefin_item.update_access_url!(setup_token: setup_token)
|
|
|
|
# Step 2: Sync the item to import fresh data.
|
|
# The existing repair_stale_linkages logic handles cases where SimpleFIN
|
|
# account IDs changed (e.g., user re-added institution in SimpleFIN Bridge).
|
|
simplefin_item.sync_later
|
|
|
|
Rails.logger.info(
|
|
"SimplefinConnectionUpdateJob: Successfully updated SimplefinItem #{simplefin_item.id} " \
|
|
"with new access_url for family #{family_id}"
|
|
)
|
|
end
|
|
end
|