mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-24 15:49:39 +02:00
36 lines
914 B
Ruby
36 lines
914 B
Ruby
|
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
|