mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-08-05 05:25:24 +02:00
Balance sheet cache layer, non-blocking sync UI (#2356)
* Balance sheet cache layer with cache-busting * Update family cache timestamps during Sync * Less blocking sync loaders * Consolidate family data caching key logic * Fix turbo stream broadcasts * Remove dev delay * Add back account group sorting
This commit is contained in:
parent
dab693d74f
commit
10ce2c8e23
35 changed files with 529 additions and 466 deletions
35
app/models/balance_sheet/sync_status_monitor.rb
Normal file
35
app/models/balance_sheet/sync_status_monitor.rb
Normal file
|
@ -0,0 +1,35 @@
|
|||
class BalanceSheet::SyncStatusMonitor
|
||||
def initialize(family)
|
||||
@family = family
|
||||
end
|
||||
|
||||
def syncing?
|
||||
syncing_account_ids.any?
|
||||
end
|
||||
|
||||
def account_syncing?(account)
|
||||
syncing_account_ids.include?(account.id)
|
||||
end
|
||||
|
||||
private
|
||||
attr_reader :family
|
||||
|
||||
def syncing_account_ids
|
||||
Rails.cache.fetch(cache_key) do
|
||||
Sync.visible
|
||||
.where(syncable_type: "Account", syncable_id: family.accounts.active.pluck(:id))
|
||||
.pluck(:syncable_id)
|
||||
.to_set
|
||||
end
|
||||
end
|
||||
|
||||
# We re-fetch the set of syncing IDs any time a sync that belongs to the family is started or completed.
|
||||
# This ensures we're always fetching the latest sync statuses without re-querying on every page load in idle times (no syncs happening).
|
||||
def cache_key
|
||||
[
|
||||
"balance_sheet_sync_status",
|
||||
family.id,
|
||||
family.latest_sync_activity_at
|
||||
].join("_")
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue