Files
sure/db/migrate/20251025095800_relax_simplefin_item_institution_constraints.rb
luckyPipewrench fea228d03e Simplefin sync improvements (#240)
* Fix syncing issues with new connections and accounts..

- Keep SimpleFin institution metadata strictly per account (`simplefin_accounts.org_data`).
- Relax `simplefin_items` institution constraints to allow creating items before org data exists.
- Remove code that copied the first account’s `org` onto `simplefin_items`.

* Improve Simplefin Sync
•
SimpleFin: family “Sync” includes SimpleFin items; importer does unbounded discovery (with pending=1 fallback) before windowed fetch, for both regular and first syncs.
•
Stop populating item‑level institution fields; keep institution metadata per account.
•
Relax NOT NULL on item institution fields.
•
Post‑sync dashboard broadcasts are now guarded (UI cannot fail the job).
•
Show a friendly “daily refresh limit” banner on the SimpleFin card when the latest sync is rate‑limited.
•
Add bin/rails sure:simplefin:debug[ITEM_ID] to print latest sync, snapshot account count, simplefin_accounts count, and unlinked list.

* Fixed double‑quoted strings, spacing around array brackets and commas

* chore: ignore local .junie files

* - Broadcast error logs now include full backtraces
- SimpleFin discovery logic deduplicated fixed
- app/models/simplefin_item/importer.rb
--Added a concise docstring for perform_account_discovery describing purpose, steps, and side‑effects.
--Added a docstring for fetch_accounts_data describing params and return value.
2025-10-26 15:50:45 +01:00

21 lines
909 B
Ruby

class RelaxSimplefinItemInstitutionConstraints < ActiveRecord::Migration[7.2]
def up
# SimpleFin doesn't guarantee institution metadata on first fetch,
# so these fields must be optional.
change_column_null :simplefin_items, :institution_id, true
change_column_null :simplefin_items, :institution_name, true
end
def down
# Restoring NOT NULL could break existing rows that legitimately have no institution metadata.
# We keep this reversible but conservative: only set NOT NULL if no NULLs exist.
if execute("SELECT COUNT(*) FROM simplefin_items WHERE institution_id IS NULL").first["count"].to_i == 0
change_column_null :simplefin_items, :institution_id, false
end
if execute("SELECT COUNT(*) FROM simplefin_items WHERE institution_name IS NULL").first["count"].to_i == 0
change_column_null :simplefin_items, :institution_name, false
end
end
end