mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-24 15:49:39 +02:00
* Rename MarketDataSyncer to MarketDataImporter * Materializers * Importers * More reference replacements
47 lines
1.4 KiB
Ruby
47 lines
1.4 KiB
Ruby
module ExchangeRate::Provided
|
|
extend ActiveSupport::Concern
|
|
|
|
class_methods do
|
|
def provider
|
|
registry = Provider::Registry.for_concept(:exchange_rates)
|
|
registry.get_provider(:synth)
|
|
end
|
|
|
|
def find_or_fetch_rate(from:, to:, date: Date.current, cache: true)
|
|
rate = find_by(from_currency: from, to_currency: to, date: date)
|
|
return rate if rate.present?
|
|
|
|
return nil unless provider.present? # No provider configured (some self-hosted apps)
|
|
|
|
response = provider.fetch_exchange_rate(from: from, to: to, date: date)
|
|
|
|
return nil unless response.success? # Provider error
|
|
|
|
rate = response.data
|
|
ExchangeRate.find_or_create_by!(
|
|
from_currency: rate.from,
|
|
to_currency: rate.to,
|
|
date: rate.date,
|
|
rate: rate.rate
|
|
) if cache
|
|
rate
|
|
end
|
|
|
|
# @return [Integer] The number of exchange rates synced
|
|
def import_provider_rates(from:, to:, start_date:, end_date:, clear_cache: false)
|
|
unless provider.present?
|
|
Rails.logger.warn("No provider configured for ExchangeRate.import_provider_rates")
|
|
return 0
|
|
end
|
|
|
|
ExchangeRate::Importer.new(
|
|
exchange_rate_provider: provider,
|
|
from: from,
|
|
to: to,
|
|
start_date: start_date,
|
|
end_date: end_date,
|
|
clear_cache: clear_cache
|
|
).import_provider_rates
|
|
end
|
|
end
|
|
end
|