1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-25 08:09:38 +02:00

Fetch exchange rates for accounts that require conversion for net worth rollups (#1983)
Some checks are pending
Publish Docker image / ci (push) Waiting to run
Publish Docker image / Build docker image (push) Blocked by required conditions

* Sync required exchange rates for accounts

* Refactor into concern
This commit is contained in:
Zach Gollwitzer 2025-03-11 10:10:28 -04:00 committed by GitHub
parent 7b751ac7ca
commit b8a3ca7732
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 113 additions and 1 deletions

View file

@ -1,5 +1,5 @@
class Account < ApplicationRecord
include Syncable, Monetizable, Issuable, Chartable, Enrichable, Linkable
include Syncable, Monetizable, Issuable, Chartable, Enrichable, Linkable, Convertible
validates :name, :balance, :currency, presence: true

View file

@ -19,6 +19,8 @@ class Account::Balance::Syncer
if strategy == :forward
update_account_info
end
account.sync_required_exchange_rates
end
end

View file

@ -0,0 +1,28 @@
module Account::Convertible
extend ActiveSupport::Concern
def sync_required_exchange_rates
unless requires_exchange_rates?
Rails.logger.info("No exchange rate sync needed for account #{id}")
return
end
rates = ExchangeRate.find_rates(
from: currency,
to: target_currency,
start_date: start_date,
cache: true # caches from provider to DB
)
Rails.logger.info("Synced #{rates.count} exchange rates for account #{id}")
end
private
def target_currency
family.currency
end
def requires_exchange_rates?
currency != target_currency
end
end